标签:solr-查询
在solr里面,如何合理的控制的命中的数量?
在一些日常的文章中或一些信息中,都有一些高频词,而这些高频词,在参与查询时,往往会造成,大量的结果集命中。
什么意思呢? 举个例子,假如我们现在做的是饭店的搜索,在我们的索引库里有一列name这个field,这里面大部分都是xxx饭店,假如你搜索的时候搜一个xxx饭店,会被分词成:
xxx
饭店
然后xxx命中只有10条结果集, 而饭店确命中了20万结果集,这么以来总结果可能就有20多万条,造成了大量的数据命中,一方面显示了信息的丰富性,另一方面可能给用户造成太多的困惑。
在Lucene,Solr和ElasticSearch里面一般的分词的查询结果都会对这两个率做一个最好效果的调配,而这个默认的相关性评分规则就是:
回到刚才饭店的那个问题,假如现在有想要搜索一个:
北京车道沟北里小庄十里香饭店,分词后的情况如下:
车道
沟
北里
小庄
十里
香
饭店
注意,在整个索引库里面大部分要搜索的数据都含有北京和饭店两个词,所以这一下几乎会索引里面的所有数据都查询出来了,虽然查询排名还可以,但命中量太大了,超过4页之后几乎都是北京xxxx饭店了,跟主题的搜索没啥关系,所以我们可以采取一些策略来避免这种情况:
solr默认的搜索策略,是分词后的term的or的关系,最后结果集全部返回,如果我们改成and,那就是精确匹配了,但是有一点就是,如果是精确的匹配,某些时候用户输入的不完整的词就失去了全文检索的含义了,所以我们要采取一种综合的策略,既保证查准,又能保证召回,这样才能实现?
车道
沟
北里
小庄
十里
香
饭店
必须命中3个或更多的term,我才认为相关性更大,或者有一个百分比来限制80%以上的命中,就算此条记录不错。这个使用solr的edismax可以解决,方法如下:
使用edismax,在q里写完
name:北京xxxxx饭店后
在Raw Query Paramters参数里面写
defType=edismax&mm=80%25
然后查询即可,mm是最小匹配的数量,可以是个固定的值,也可也是个百分比,因为散仙是在solr的admin页面查询,所以需要把%替换成url字符%25,这样才能正确发送到solr的服务端 具体的资料请看:
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:solr-查询
原文地址:http://blog.csdn.net/u010454030/article/details/46862161