分析器检查字段的文本,然后生成一个token流.在schema.xml中,分析器作为<fieldType>的一个子元素.在普通的使用当中,只有字段类型solr.TextField使用分析器.配置分析器最简单的方式就是使用一个<analyzer>元素,它的class属性是一个java的类名.  

<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
</fieldType>

  在这个例子中,类WhitespaceAnalyzer主要负责分析TextField类型数据的内容并发出相应的tokens.举一个简单的例子,如纯英文散文,像这样一个简单的分析器类已经足够了,但是对于字段内容,需要做更多的复合分析.

  甚至大部分的复合分析要求都能分解成一系列的独立元件.不久你就会发现,solr的distribution部分提供了很多的分词器(tokenizer)和过滤器(filter)的选择,设置一个分词器链非常的简单直接.

  举例:

<fieldType name="nametext" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StandardFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.StopFilterFactory" />
<filter class="solr.EnglishPorterFilterFactory" />
</analyzer>
</fieldType>

  注意:包名 org.apache.solr.analysis可以直接通过solr. 来关联.

  在这个例子中,没有在<analyzer>中指定class属性.而是更多专门的类的序列连在一起构成<analyzer>,充当字段的分析器.字段的文本通过这个列表的第一个条目( solr.StandardTokenizerFactory),从最后一个标记(solr.EnglishPorterFilterFactory)出现的tokens,用于索引和查询.

分析阶段

  分析发生在两处环境当中,在建立索引的时候,当一个字段被创建,分析产生的token流被添加到索引中,为字段定义条目(term)的设置(包含 positions, sizes等等).在查询的时候,搜索的文字会被分析,产生的条目(terms)会去匹配字段索引中的条目.

  在很多时候,相同的分析用于这两个阶段-索引和查询.但是有些时候可能会有轻微的不同.

  如果提供了一个简单的如上的<analyzer>,那么它将用于索引和查询,如果你想要为每个阶段分开使用分析器,你需要在字段类型中包含两个分析器.如下:

<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>

  在这个假设的例子中,在索引的时候,文本会被分词,然后词(tokens)转化为小写,任何没有列在文件keepwords.txt中的词(token)都会被丢弃.然后这些保留下来的词可以映射到syns.txt中词.在查询的时候,做的规范处理只是小写处理.

最新文章

  1. bzoj4462: [Jsoi2013]编程作业
  2. SharePoint 2010 文档管理系列之文档搜索
  3. Sql Server之旅——第七站 为什么都说状态少的字段不能建索引
  4. 【转】drupal7请求异常,执行时间过长的解决方法
  5. Mac OS X 快捷键
  6. iOS - Swift NSTimer 定时器
  7. ASP.NET 之深入浅出Session和Cookie
  8. 最全的js正则表达式用法大全
  9. cmd启动,重启,停止IIS命令
  10. 局域网使用的IP地址范围
  11. 使用svn无法cleanup和lock问题
  12. 【持续跟新】剑指Offer_Java实现
  13. mask_rcnn训练自己的数据集
  14. echo '1'.print(2)+3; 的输出结果为什么是511
  15. Maven 的 settings.xml 配置中的mirror节点
  16. iis7 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
  17. 20135327郭皓——Linux内核分析第二周 操作系统是如何工作的
  18. 计算机网络的服务质量(QoS)
  19. sed你所不知道的语法
  20. 前端PHP入门-008-自定义函数

热门文章

  1. 细说OpenSessionInView问题
  2. codeforces 601A The Two Routes(最短路 flody)
  3. WinHTTP Web Proxy Auto-Discovery Service
  4. 2013-2014集训之DP
  5. C# Control 控件DrapDrop不触发的问题
  6. 跟SAP系统集成的Android应用
  7. 12.组合(Composition)
  8. android Thread和Runable区别,精讲(有疑问)
  9. Extjs Google的Suggest的自动提示 从后台取数据
  10. 全代码实现ios-4