在使用搜索引擎的时候,对于用户来说,我们更希望我们被想要的结果被搜索出来,如果搜索结果中出现一些冗杂信息的时候,我们更希望我们想要的结果被排在最前面,这样子我们可以更快触达到我们想要的结果。在elasticsearch中,为了解决这个问题,提供了打分机制(这个打分严格意义来说不是属于elasticsearch的,而是属于lucene的)。这篇文章我们介绍下Elasticsearch的打分机制。
首先我们展示一张搜索结果图:
从这张图可以看到在每一个搜索结果里面会有一个_score的字段,这就是对搜索结果进行打分的效果。
在Elasticsearch中他的打分公式是:
根据上面的公式,我们得出了几个部分:
1、TF 2、IDF 3、Boost
下面我们分别介绍下这3个参数
一、TF
这个TF的含义是词频,也就是一个关键词在一个语句中出现的频率越多,就越相关,举个例子:
1、这是一篇介绍月亮的文章,今天晚上的月亮很圆 2、明晚的月亮不会出来
在上面我们列举了2个文档,两个文档里面都包含有月亮的关键词,当我们在搜索月亮的时候,第一个文档被会匹配到两次,也就是TF词频是2,第二个文档会被匹配到一次,也就是TF词频是1。那么理解一下,当我们搜索月亮的时候,是不是第一个文档更满足我们的期望呢?是不是应该评分高一点?排序排在前面一点?
二、IDF
这个IDF的含义我们可以理解成是逆文档频率,也就是一个关系在所有的文档里面出现的次数越多,代表这个词越不重要。还是举个例子:
1、张三家的猫进行没有吃猫粮,因此今天还没有喝水。 2、王五今天没有带午餐,因此今天中午他没有吃饭。 3、这里没有水
在上面我们列举了3个文档,每个文档里面都出现了没有这个关键词,那就说明没有这个关键词很普遍,因此在计算得分的时候,它的基础分就会非常低,那么对于相关的匹配性文档的总打分也会很低。
逆文档频率是一个分词重要的因素,用来平衡词条的词频。
当我们在搜索的时候,一旦关键词在词频TF和逆文档频率IDF的计算完成后,就可以使用上面的公式来计算整个文档的得分了。
最后我们再来说下这个boost,boost主要用来我们作为手动控制打分,影响结果的排序,例如我们有一个博客,博客里面很很多文章。此时我们在博客中搜索elasticsearch的关键词的时候,我们期望title字段包含的elasticsearch关键词的排序尽量在body字段包含的elasticsearch关键词的文章之间,此时我们就可以手动的为title字段设置boost,这样在最后进行得分计算的时候,title的得分就会高很多。因此排序就会在前面。在下一篇文章我们会详细的介绍boost参数。
还没有评论,来说两句吧...