搜索绝对不仅仅是搭起框架,搜索到结果就完成的工作,对于结果集的分词、排序等等的优化才是重中之重。
先简单说下背景:主要搜索对象为电商商品、商铺等等。
使用技术:solr、IK_Analyzer
项目中遇到的solr搜索产生多词匹配,导致搜索结果中会有不需要显示的数据。
下来我分享下我在项目中是怎么解决的。
比如:我现在要搜“洗衣机”,结果会出现洗衣机并且排名是在最前面,但是到后面就会有,挂烫机、手机、料理机、有机..等你的带“机”的商品,这个确实很苦恼啊,然后用分词器测试了分词结果,是洗衣、机,这两个。那就意味着洗衣和机是多匹配,导致我不需要的数据出来了。
![](https://img.haomeiwen.com/i5992368/0cc48ce834636cd5.png)
![](https://img.haomeiwen.com/i5992368/a9c6be3c27f01f01.png)
最终经过查阅资料,把这个问题解决了,具体就是在solr项目中的schema.xml 中设置slolr查询解析器<solrQueryParser defaultOperator="AND">属性把默认的or改为and
![](https://img.haomeiwen.com/i5992368/2d74534900fc6663.png)
在重新启动服务就ok了,分析了下其实slolr查询解析器<solrQueryParser>默认or是分词集合的并集,那洗衣机来说,分词洗衣机、洗衣、机共同搜索出来的商品三个字中只要有其一就可以,而and是分词集合的交集,就是搜索结果中必须同时存在洗衣机、洗衣、机这三者分词才命中。
![](https://img.haomeiwen.com/i5992368/c3d6216f038e16ad.png)
网友评论