`
Abigale_Work
  • 浏览: 5851 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

solr 分析器

    博客分类:
  • solr
阅读更多
从下面的网站摘来,非常感谢
http://matieli.iteye.com/blog/1011149

九、 SOLR搭建企业搜索平台--字段增加权重
在很多时候,我们可能会需要增加某一个字段的权重,以合理的显示搜索结果。
例如:有一个schma,有三个字段:chapterId, title, content.
我们希望某一个关键字如果在title中匹配了,就要优先显示,而在content中匹配了,就放在搜索结果的后面。当然,如果两者同时匹配当然没什么好说的了。看看solr中如何做到吧。
title:(test1 test2)^4 content:(test1 test2)
给title字段增加权重,优先匹配
关于^后面的数字4,经过我测试,最佳值应该是有n个字段就写成n+1,当然希望大家能更好的去测试!

十、 SOLR搭建企业搜索平台-- Solr分词器、过滤器、分析器
关于lucene的分析器,分词器,过滤器,请看:http://lianj-lee.iteye.com/blog/501247

    对一个document进行索引时,其中的每个field中的数据都会经历分析(根据上面的一个博客可以知道,分析就是组合分词和过滤),最终将一句话分成单个的单词,去掉句子当中的空白符号,大写转换小写,复数转单数,去掉多余的词,进行同义词代换等等。
  如:This is a blog! this, is, a 会被去除,最后最剩下blog。当然!这个符号也会被去除的。
  这个过程是在索引和查询过程中都会进行的,而且通常两者进行的处理的都是一样的,这样做是为了保证建立的索引和查询的正确匹配。
分析器(Analyzer)
  分析器是包括两个部分:分词器和过滤器。分词器功能将句子分成单个的词元token,过滤器就是对词元进行过滤。
  solr自带了一些分词器,如果你需要使用自定义的分词器,那么就需要修改schema.xml文件。
  schema.xml 文件允许两种方式修改文本被分析的方式,通常只有field类型为 solr.TextField 的field的内容允许定制分析器。

    方法一:使用任何 org.apache.lucene.analysis.Analyzer的子类进行设定。
<fieldType name="text" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
    方法二:指定一个TokenizerFactory ,后面跟一系列的TokenFilterFactories(它们将按照所列的顺序发生作用),Factories被用来创建分词器和分词过滤器,它们用于对分词器和分词过滤器的准备配置,这样做的目的是为了避免the overhead of creation via reflection。

<analyzer type="index">
        <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
……

    </analyzer>
    <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/>
    ……
    </analyzer>

  需要说明的一点是,Any Analyzer, TokenizerFactory, or TokenFilterFactory 应该用带包名的全类名进行指定,请确保它们位于Solr的classpath 路径下。对于 org.apache.solr.analysis.* 包下的类,仅仅通过solr.*就可以进行指定。

   如果你需要使用自己的分词器和过滤器,你就需要自己写一个 factory ,它必须是 BaseTokenizerFactory(分词器) 或BaseTokenFilterFactory(过滤器)的子类。就像下面一样。

public class MyFilterFactory extends BaseTokenFilterFactory {
  public TokenStream create(TokenStream input) {
    return new MyFilter(input);
  }
}

对于IK3.1.5版本已经完全支持了solr的分词,这样就不用自己来编写了, 而对于中文的切词的话,ik对solr的支持已经很完美了。

Solr提供了哪些TokenizerFactories?

1.  solr.LetterTokenizerFactory
   创建org.apache.lucene.analysis.LetterTokenizer.
   分词举例:
   "I can't" ==> "I", "can", "t",字母切词。

2.  solr.WhitespaceTokenizerFactory
   创建org.apache.lucene.analysis.WhitespaceTokenizer,主要是切除所有空白字符。

3.  solr.LowerCaseTokenizerFactory
   创建org.apache.lucene.analysis.LowerCaseTokenizer
   分词举例:
  "I can't" ==> "i", "can", "t",主要是大写转小写。

4.  solr.StandardTokenizerFactory
   创建org.apache.lucene.analysis.standard.StandardTokenizer
   分词举例:  "I.B.M. cat's can't" ==>
ACRONYM: "I.B.M.", APOSTROPHE:"cat's", APOSTROPHE:"can't"
   说明:该分词器,会自动地给每个分词添加type,以便接下来的对type敏感的过滤器进行处理,目前仅仅只有StandardFilter对Token 的类型是敏感的。

5.  solr.HTMLStripWhitespaceTokenizerFactory
从结果中除去HTML标签,将结果交给WhitespaceTokenizer处理。
例子:
my <a href="www.foo.bar">link</a>
my link
<?xml?><br>hello<!--comment-->
hello
hello<script><-- f('<--internal--></script>'); --></script>
hello
if a<b then print a;
if a<b then print a;
hello <td height=22 nowrap align="left">
hello
a&lt;b &#65 Alpha&Omega &Omega;
a<b A Alpha&Omega Ω

6.  solr.HTMLStripStandardTokenizerFactory
从结果中出去HTML标签,将结果交给StandardTokenizer处理。

7.  solr.PatternTokenizerFactory
说明:按照规则表达式样式对分本进行分词。
例子:处理对象为,mice; kittens; dogs,他们由分号加上一个或多个的空格分隔。
<fieldType name="semicolonDelimited" class="solr.TextField">
  <analyzer>
     <tokenizer class="solr.PatternTokenizerFactory" pattern="; *" />
  </analyzer>
</fieldType>


Solr有哪些TokenFilterFactories?

1.  solr.StandardFilterFactory
创建:org.apache.lucene.analysis.standard.StandardFilter.
移除首字母简写中的点和Token后面的’s。仅仅作用于有类的Token,他们是由StandardTokenizer产生的。
例:StandardTokenizer+ StandardFilter
"I.B.M. cat's can't" ==> "IBM", "cat", "can't"
2.  solr.LowerCaseFilterFactory
创建:org.apache.lucene.analysis.LowerCaseFilter.
3.  solr.TrimFilterFactory【solr1.2】
创建:org.apache.solr.analysis.TrimFilter
去掉Token两端的空白符
例:
" Kittens!   ", "Duck" ==> "Kittens!", "Duck".
4.  solr.StopFilterFactory
创建:org.apache.lucene.analysis.StopFilter
去掉如下的通用词,多为虚词。
   "a", "an", "and", "are", "as", "at", "be", "but", "by",
    "for", "if", "in", "into", "is", "it",
    "no", "not", "of", "on", "or", "s", "such",
    "t", "that", "the", "their", "then", "there", "these",
    "they", "this", "to", "was", "will", "with"
自定义的通用词表的使用可以通过schema.xml文件中的"words"属性来指定,如下。
<fieldtype name="teststop" class="solr.TextField">
   <analyzer>
     <tokenizer class="solr.LowerCaseTokenizerFactory"/>
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
   </analyzer>
</fieldtype>

5.   solr.KeepWordFilterFactory【solr1.3】
创建:org.apache.solr.analysis.KeepWordFilter
作用与solr.StopFilterFactory相反,保留词的列表也可以通过”word”属性进行指定。
<fieldtype name="testkeep" class="solr.TextField">
   <analyzer>
     <filter class="solr.KeepWordFilterFactory" words="keepwords.txt" ignoreCase="true"/>
   </analyzer>
</fieldtype>

6. solr.LengthFilterFactory
创建:solr.LengthFilter
过滤掉长度在某个范围之外的词。范围设定方式见下面。
<fieldtype name="lengthfilt" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LengthFilterFactory" min="2" max="5" />
  </analyzer>
</fieldtype>

7.  solr.PorterStemFilterFactory
创建:org.apache.lucene.analysis.PorterStemFilter
采用Porter Stemming Algorithm算法去掉单词的后缀,例如将复数形式变成单数形式,第三人称动词变成第一人称,现在分词变成一般现在时的动词。
8.  solr.EnglishPorterFilterFactory
创建:solr.EnglishPorterFilter
关于句子主干的处理,其中的"protected"指定不允许修改的词的文件。
9.  solr.SnowballPorterFilterFactory
关于不同语言的词干处理
10.solr.WordDelimiterFilterFactory
关于分隔符的处理。
11.solr.SynonymFilterFactory
关于同义词的处理。
12.solr.RemoveDuplicatesTokenFilterFactory
避免重复处理。

十一、 SOLR搭建企业搜索平台-- Solr高亮使用
1、SolrQuery类,此类有方法setHighlight(true),当设置为true时,表示开启了高亮。
2、SolrQuery类,有方法:
    // 以下给两个字段开启了高亮,分别是name,description,
    query.addHighlightField("name");
    query.addHighlightField("description");
    // 以下两个方法主要是在高亮的关键字前后加上html代码
    query.setHighlightSimplePre("<font color=\"red\">");
    query.setHighlightSimplePost("</font>");
3、下面是获取高亮的内容:
Map<String,Map<String,List<String>>> map = response.getHighlighting();
Map的Key为document的Id,即你在schema.xml中设置的Id,Value为该Id对应的document的值,Value也为一个Map,该Map的Key为fieldName,Value为List<String>,这个List里面的内容就是该文档的高亮字段。
所以当做逻辑处理的时候,只要按照这个层次,依次把东西给取出来即可,如果取出来的东西为空,则用QueryResponse中的 SolrDocument的getFieldValue(filedName)的值。
对了,请注意在solrConfig.xml中开启高亮组件,这个可以看看官方wiki或者看solrconfig.xml中注释!

十二、 SOLR搭建企业搜索平台-- Solr的检索运算符
1. “:” 指定字段查指定值,如返回所有值*:*
2. “?” 表示单个任意字符的通配
3. “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
4. “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
5. 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10
6. “^” 控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
7. 布尔操作符AND、||
8. 布尔操作符OR、&&
9. 布尔操作符NOT、!、- (排除操作符不能单独与项使用构成查询)
10.“+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在
11. ( ) 用于构成子查询
12. [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
13. {} 不包含范围检索,如检索某时间段记录,不包含头尾
date:{200707 TO 200710}
14. \ 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : \
补:
庖丁分词器
1. <fieldType name="text" class="solr.TextField">
2.   <analyzer class="net.paoding.analysis.analyzer.PaodingAnalyzer"></analyzer>
3. </fieldType>
4. 注意:不能有 positionIncrementGap 属性。
paoding-dic-home.properties文件的配置如下:

#values are "system-env" or "this";
#if value is "this" , using the paoding.dic.home as dicHome if configed!
#paoding.dic.home.config-fisrt=system-env

#dictionary home (directory)
#"classpath:xxx" means dictionary home is in classpath.
#e.g "classpath:dic" means dictionaries are in "classes/dic" directory or any other classpath directory
#paoding.dic.home=dic

#seconds for dic modification detection
#paoding.dic.detector.interval=60
paoding.dic.home=C://solr-tomcat//solr//dic
设置环境变量 paoding.dic.home
然后在schema.xml中配置FILED的类型是上面定义的Text
分享到:
评论

相关推荐

    solr ik分词器

    -- 同上,也可以添加其他查询分析器过滤器 --&gt; ``` 这里,我们定义了一个名为`text_ik`的字段类型,使用了`HMMChineseTokenizerFactory`,这是一种基于隐马尔科夫模型(HMM)的中文分词器。 5. **更新字段...

    solr分词器使用手册

    ### Solr分词器使用手册知识点详解 #### 一、Solr概述 - **定义**:Solr是一款基于Java开发的、由Apache基金会维护的顶级开源项目,它是一款高性能的全文检索服务器。Solr不仅继承了Lucene的核心索引与搜索能力,还...

    match-query-parser,在solr中使用不同的查询时间分析器搜索单个字段.zip

    默认情况下,Solr使用标准查询分析器(Standard Query Parser),但有时我们可能需要针对特定字段定制查询行为,例如,处理特殊查询语法或执行精确匹配。这就是`match-query-parser`发挥作用的地方。 `match-query-...

    solr分词器

    同时,可以通过Solr的分析器工具(Analysis UI)来实时查看分词效果,方便调试和优化。 总的来说,Solr分词器是构建高效、精准的全文搜索引擎不可或缺的一部分。选择合适的分词器并进行适当的配置,能够极大地提升...

    solr中文分词器

    在Solr中,分词器(Tokenizer)是分析器(Analyzer)的一部分,负责将输入的文本拆分成可被索引的基本单元——词(Token)。中文分词器的引入解决了英文分词相对简单,而中文以字为基本单位,需要特殊处理才能正确...

    Apache Solr(solr-8.11.1.tgz)

    7. **contrib 目录**:包含了一些社区贡献的模块,如数据分析器、搜索组件和请求处理器等,这些可以扩展Solr的功能。 在Solr 8.11.1版本中,可能包含以下特性: - **性能优化**:Solr团队不断努力提升查询速度和...

    solr讲解,案例分析

    同时,会讨论查询优化策略,如使用过滤器、缓存和查询分析器等。 4. **高级功能**:可能包括实时索引更新、分布式搜索(通过SolrCloud)和多核心管理。SolrCloud使得Solr可以在集群环境中运行,提供高可用性和故障...

    solr技术分析及运用超详细教程

    solr技术分析及运用超详细教程solr开发指南,包括solr服务器搭建,新增数据库配置,配置增量更新,配置分词器,常见异常,删除默认字段,调试技巧,solr日志,,solr基本查询语法,solr多字段匹配,solri集成solr...

    solr-6.2.0源码

    6. 多语言支持:Solr内置了多种语言分析器,支持不同语言的全文搜索。 7. 高亮显示:Solr可以高亮显示搜索结果中的关键词,提高用户体验。 三、Solr 6.2.0的改进与新特性 1. 改进的ShardHandler API:增强了对请求...

    ik_analyzer中文分析器solr6版及以下版本适用(完整版)

    《ik_analyzer中文分析器Solr 6版及其以下版本适用》 ik_analyzer中文分析器,作为一款专为处理中文文本的开源工具,对于Solr 6版本及以下的用户来说,它提供了强大的文本分词功能。这款分析器的设计初衷是解决中文...

    支持solr5.5 solr6.0中IK分词需要的资料

    3. **配置分析器**:在Solr的`schema.xml`或`managed-schema`文件中,为需要使用IK分词器的字段定义分析器。 ```xml &lt;fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&gt; ...

    ik_analyzer中文分析器solr6版及以下版本适用

    **ik_analyzer中文分析器** 是一款专门为处理中文文本而设计的开源分词工具,它在Solr和Elasticsearch等搜索引擎中广泛应用。这个标题提到的是适用于Solr 6版本及以下的ik_analyzer分析器,表明这个压缩包提供了一个...

    solr7.3.1中文分词器

    其次,配置Solr的schema.xml文件,声明使用IK分词器作为字段的分析器;最后,根据需求调整IK分词器的配置文件,比如添加自定义词典或者设置分词模式。 总的来说,这个压缩包提供了Solr 7.3.1处理中文内容所需的关键...

    k-analyzer-solr solr分词器

    Solr分词器是搜索引擎Apache Solr中的一个重要组件,它负责对输入的文本进行分析,将其拆分成可索引的基本单元——词语。"k-analyzer-solr" 是一个特定的分词器实现,用于优化Solr的文本处理流程。在Solr中,分词器...

    solr-7.4.0.zip

    Solr 7.4.0版本引入了许多新特性,比如增强的查询分析器,支持更丰富的JSON查询语法,以及性能上的优化。此外,它还支持动态字段和字段类型,方便处理各种数据结构。SolrCloud模式允许你构建高可用和可扩展的搜索...

    solr-4.10.3+ik分词器

    添加或修改相应的分析器设置,比如设置默认的查询分析器和索引分析器为IKAnalyzer。重启Solr服务后,分词器就会生效。 在实际应用中,你可能还需要自定义索引字段,设置分词策略,甚至为IK分词器配置扩展词库,以...

    solr(中文分词器)集群

    在Solr的`schema.xml`配置文件中,你可以指定IK分词器作为默认的分析器,这样在索引和查询时就会使用这个分词器。 一旦Solr集群和IK分词器配置好,就可以开始导入数据了。Solr提供了多种方式导入数据,如HTTP API、...

    solr(solr-9.0.0.tgz)

    Solr-9.0.0是该软件的最新版本,此版本可能包含了一些新的特性和改进,比如性能优化、新的查询语法、更强大的分析器等。 在Solr-9.0.0的压缩包中,通常会包含以下组件: 1. **bin** 文件夹:这个目录下有启动和...

Global site tag (gtag.js) - Google Analytics