solr做搜索 *关键词*无法全字匹配

我用solr做搜索,因为条件比较复杂 我就不多说细节了,最简化调试发现用软件工程师无法匹配到职业为 软件工程师 的记录,但是我用 软件工程 却可以匹配到,也就是说完全匹配的时候反而取不到,
我用debug查询

clipboard.png

而软件工程 的debug为:

clipboard.png

可以看到貌似用**包裹关键词,并不会对关键词分词,而对内容的 软件工程师分词结果是:

clipboard.png

按照我的理解 solr是不是在把内容打散成分词以后再用分词对关键词进行匹配啊? 就像 软件工程师 内容打散后中间包含了 软件工程 所以我用软件工程四个字可以搜到 而软件工程师不分词搜索就搜不到了

(。。。我怎么提问提着提着自己好像把答案给分析出来了。。。)有大神知道啥原因吗?

阅读 11.2k
4 个回答

你说的大概意思是对的,就是solr在创建索引的时候,会对内容(类型为TEXT类型或者其它你自定义的分词类型)进行分词操作,就比如你这里的‘软件工程师’,在创建索引的时候会把‘软件工程师’分成以下的词语存储:‘软件工程’‘软件’‘工程师’‘工程’‘师’。所以只有搜索分词后的词汇才能搜索到结果,如果你想搜索到‘软件工程师’可以有二种解决方法:
1.在你的分词插件中,增加扩展词汇,把‘软件工程师’加到扩展词汇中。
2.建索引时,设置该字段的类型为String类型的,也就是不会分词的。这种情况就只能搜索‘软件工程师’。而其他的如‘软件工程’等,也就搜索不到了。

新手上路,请多包涵

请问你解决了吗 ?我也遇到这个问题了

上面回答很到位
我再给你提供几种解决方案

1.第一种:可以选择调节分词粒度较大的分词器

2.第二种:这种也是之前在上家公司想到的一种解决方法 对于粗细粒度都可以自适应,

首先在solr建立检索的时候不进行分词,使用solr自带的分词,也就是不分词,比如软件工程师,分词结果为 软 件 工 程 师 分为五个结果集 这样在搜索 软件 工程 工程师 软件工程师 之类的是可以检索到的,这样的弊端就是搜索的结果不准确.比如 你在搜索 软件 这个关键词的时候,如果一篇文章中只要含有 软 和 件 这两个字 都可以被检索到,这样的结果肯定不是我们想要的结果.

为了解决这种结果不准确,可以使用solr自带的一个机制 双引号 ,搜索的关键词用双引号包起来,这样solr在检索的时候会将双引号的内容必须是连在一起的才会检索到,如 "软件" 只会检索到软件这两个字连在一起的结果,但其实这样做的结果还有一个弊端,就是对用户的检索体验并不是很友好,比如: 业务和服务 在进行检索的时候可能会检索到 和服 这种并不是我们想得到的用户搜索结果,这时候可以使用中文分词再对用户的检索词进行分词,然后再使用分词的结果进行检索.

1.这是创建索引分词造成的,可以不使用分词
2.在使用的时候使用“”全词匹配精确查找