在搜索中,往往需要用到关联词(近义词),比如,搜索 “联想” 品牌那么我们同时搜索 “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" /> |
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" /> |
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 =>联想
理解这一点,配置其实真的很简单,我在诚交网易货产品搜索中,也是如此配置,就是搜索关联词是一个麻烦活。