`
sharp-fcc
  • 浏览: 105988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

理解solr中的 Analyzer,Tokenizer,Filter

阅读更多

翻译自 Apache Solr Reference Guide

 

Analyzer:

analyzer负责检查这个field,然后生成一个token流,一般作为fieldType的一个字节点存在,比如:

<analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNu
mbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>

 

 任何复杂的field的分析都可以被分成独立的,一系列的处理步骤,你会发现solr中包含了大部分你需要用到的analyzer。在这个例子中,虽然没有制定特定的analyzer的类,但是他们的按照配置的流程依次走过,从 WhitespaceTokenizerFactory 开始,最后PorterStemFilterFactory 结束。通过配置analyzer的type可以指定是在 index阶段还是 query阶段使用。

 

Tokenizer:

tokenizer是把一个文本流切成一个个token的,就是传说中的分词,把一句话分成一段一段的,一些空格,停顿符啥的可能被扔了,一个token包含一些这个词的元信息在里面,比如说这个词的位置,当然分词的结果很可能是偏离原来意思的。如果就为了分词的话,一个analyzer中只有一个tokenizer,否则,这个输出会作为以下输入来使用,

 

Filter:

filter比tokenizer简单,是专门处理一个个token的, 把他们做变换或者是丢弃什么的。filter是接受一个token流,输出一个token流,所以可以是一个链条,处理的顺序跟schema里面的顺序是一样的,所以我们一般把通用的filter放到前面,其他放后面。

 

 调试自己的anaylizer使用http://localhost:8983/solr/#/collection1/analysis  就可以了 ,十分方便。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics