我用solr做搜索,因为条件比较复杂 我就不多说细节了,最简化调试发现用软件工程师无法匹配到职业为 软件工程师 的记录,但是我用 软件工程 却可以匹配到,也就是说完全匹配的时候反而取不到,
我用debug查询
而软件工程 的debug为:
可以看到貌似用**包裹关键词,并不会对关键词分词,而对内容的 软件工程师分词结果是:
按照我的理解 solr是不是在把内容打散成分词以后再用分词对关键词进行匹配啊? 就像 软件工程师 内容打散后中间包含了 软件工程 所以我用软件工程四个字可以搜到 而软件工程师不分词搜索就搜不到了
(。。。我怎么提问提着提着自己好像把答案给分析出来了。。。)有大神知道啥原因吗?
你说的大概意思是对的,就是solr在创建索引的时候,会对内容
(类型为TEXT类型或者其它你自定义的分词类型)
进行分词
操作,就比如你这里的‘软件工程师’,在创建索引的时候会把‘软件工程师’
分成以下的词语存储:‘软件工程’
,‘软件’
,‘工程师’
,‘工程’
,‘师’
。所以只有搜索分词后的词汇才能搜索到结果,如果你想搜索到‘软件工程师’
可以有二种
解决方法:1.在你的分词插件中,增加扩展词汇,把
‘软件工程师’
加到扩展词汇
中。2.建索引时,设置该字段的类型为
String
类型的,也就是不会分词的。这种情况就只能搜索‘软件工程师’
。而其他的如‘软件工程’
等,也就搜索不到了。