Solr in action 2

来源:互联网 发布:sdr软件接收机 编辑:程序博客网 时间:2024/06/06 02:04

这就是在 solr 中配置分析器(analyzer)。 


分析器分析文本分两步,分词和过滤。

分词的任务交给分词器 (tokenizer)。

分词之后产生的就是 token 流,通过一些列过滤器进一步处理。


过滤有3种形式,

1. 根据同义词,添加 token。

2. 改变 token,比如全部小写化。

3. 过滤到一些不需要的词。



这就是一个过滤 stop word 的过滤器。


让 stop word 过滤生效

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">      <analyzer type="index">        <tokenizer class="solr.StandardTokenizerFactory"/>        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />        <!-- in this example, we will only use synonyms at query time        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>        -->        <filter class="solr.LowerCaseFilterFactory"/>      </analyzer>      <analyzer type="query">        <tokenizer class="solr.StandardTokenizerFactory"/>        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>        <filter class="solr.LowerCaseFilterFactory"/>      </analyzer>    </fieldType>

先在 schema.xml 找一个带有停词过滤的 fieldType,比如这个 text_general。(有关 fieldType 的知识下一篇介绍)

可以看出停词过滤器是绑定到 stopwords.txt 的,找到同路径下的 stopwords.txt 添加两行: a 回车 the,过滤 a 和 the 这两个单词。


solr 提供一个测试分词和查询的页面:

http://localhost:8983/solr/#/collection1/analysis


先将 fieldType 设置为 text_general,然后查询 Mike is a boy. 

ST 标准分析器将分析所得 token流:Mike is a boy.

SF 停词过滤将 a 给过滤了。

LCF 所有 token 小些化。

清晰明了,就是这样一个工作机制。


注意到,和停词过滤对应的,有一个同义词过滤。

正好和停词相反,该过滤器用于查询时,添加一些同义词 token。


忘了说,这是 Solr in action 第六章的内容,其中还介绍了不少过滤器,但大多是给英文用的。


field 还有些高级属性

omitNorms 会为较短的 document 增加权重。

termVectors 实现 moke like this 功能。

termPositions termOffset 高亮功能需要。

默认都是 false,不管就行了。


如果你实现自己的分词器和过滤器,理所当然,需要实现的 Solr 的借口。

具体参考 P191  6.4.3




0 0
原创粉丝点击