Solr搜索配置关联词synonyms

在搜索中,往往需要用到关联词(近义词),比如,搜索 “联想” 品牌那么我们同时搜索 “lenovo”等,solr为我们提供了近义词过滤器solr.SynonymFilterFactory。

配置搜索近义词很简单,只要在schema字段定义过滤器

01 <fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" >
02  <analyzer type="index">    
03  <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="./dic_lib/dic"/>
04  <filter class="solr.LowerCaseFilterFactory"/>
05  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
06  </analyzer>
07  <analyzer type="query">    
08  <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="./dic_lib/dic"/>
09  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" />
10  <filter class="solr.LowerCaseFilterFactory"/>
11  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
12  </analyzer>
13 </fieldType><span></span>

solr.SynonymFilterFactory配置中,synonyms是近义词配置文件
ignoreCase:为true,表示转化为小写匹配,及忽略大小写。
expand:涉及到synonyms.txt的配置

synonyms.txt配置一行为单位,建立关键词联系:

原1,原2,...=>目标1,目标2   (原可以多个,目标也可以多个)
即当输入搜索词原1的时候,最后以 目标1,目标2当个词搜索。
1.ideapad,ideacenter,lenovo =>联想
上面这种配置,那么搜索ideapad,ideacenter,lenovo的时候都用“联想”这个关键词搜索

2.联想 => ideapad,ideacenter,lenovo,联想
输入关键词联想的时候,则用ideapad,ideacenter,lenovo,联想 4个词搜索

3.还可以用配置文件简单用,隔开来做配置
联想,ideapad,ideacenter,lenovo
这时候,如果expand为true,等同于
ideapad,ideacenter,lenovo,联想 =>ideapad,ideacenter,lenovo,联想

如果expand为false
ideapad,ideacenter,lenovo =>联想

理解这一点,配置其实真的很简单,我在诚交网易货产品搜索中,也是如此配置,就是搜索关联词是一个麻烦活。

猜你喜欢

转载自zyhui98.iteye.com/blog/2018364