我在我的网站上使用弹性搜索自动完成功能,但我遇到的问题是,弹性搜索一直在顶部的搜索框中显示较少的热门搜索。我对弹性搜索的理解表明,默认情况下,弹性搜索使用Lucene评分公式,该公式基于tf和idf来计算文档的分数。我认为idf术语对于稀有数据项目给予了更大的权重,这增加了较少流行搜索的得分。
但弹性搜索的相似性模块提到了其他相似性函数。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-similarity.html
任何人都可以告诉我哪个相似度函数更倾向于tf而不是偏爱idf,这样我就可以更加重视更频繁的数据项,以便常见搜索可以出现在搜索框的顶部?
我还读过关于扩展Lucene的相似性类,然后将idf设置为1,但是如果有任何其他方式来实现所需的结果(可能是通过改变映射中的相似性函数),我会更喜欢那个。
http://dev.fernandobrito.com/2012/10/building-your-own-lucene-scorer/
提前致谢。
tf指的是术语频率
idf指的是逆文档频率
为了更清晰,我添加了一些示例:
假设我有一些类似的文件:
> {d:1,text:"delhi to goa"}
> {d:1,text:"delhi to chakan"}
> {d:1,text:"delhi to bak"}
> {d:1,text:"delhi to adf"}
> {d:1,text:"hangout in delhi"}
> {d:1,text:"hangout in goa"}
> {d:1,text:"hangout in bareily"}
> ......
现在我搜索 delhi 我会得到以下结果:
delhi to chakan
delhi to bak
delhi to adf
delhi to goa
但相反它应该给我 delhi to goa 。
同样,如果我在中搜索视频群聊,我会得到以下结果:
hangout in bareily
hangout in goa
hangout in delhi
但是,不是上述结果,我希望在德里视频群聊。
我希望上面的例子说清楚。