Solr in action 2

这就是在 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值