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?=>联想
理解这一点,配置其实真的很简单,我在诚交网易货产品搜索中,也是如此配置,就是搜索关联词是一个麻烦活。