Elasticsearch相关性算法

Elasticsearch相关性算法主要分为三大部分:布尔模型,TF/IDF,向量空间模型

布尔模型:and,or,not根据这些条件来匹配文档,判断搜索词是否在文档中。

TF/IDF:相关性算法--TF/IDF 这篇文章里已经介绍了相关内容,计算词频的一种方法。

空间向量模型:每个词的在文档的集合中都有自己的权重,比如词A的权重为2,词B的权重为5,这样我们可以计作向量(2,5),他在坐标系上的图形就是远点到(2,5)点之间的连线。当我们搜索A,B的时候,有些文档中只存在A,有的文档只存在B,就可以近似的看作(2,0)和 (0,5),A和B都存在的就是(2,5)。同样通过原点和这些点的连线。比较这些线段和原点到(2,5)的线段的角度。角度越大,相关性越低,角度越低,则表示更接近模型线段,他的相关度就更高。

相关性算法--Elasticsearch相关性算法

以上三个主要因素决定了基础相关性的计算,除此之外,Elasticsearch还提供了许多行之有效的协调因子。

1,查询归一化因子:试图将查查询结果归一化,使查询结果之间能够相互比较。

2,协调因子:文档里出现的查询词越多,它越有机会成为好的匹配结果。

例如:

设想查询 quick brown fox ,每个词的权重都是 1.5 。如果没有协调因子,最终评分会是文档里所有词权重的总和。例如:

文档里有 fox → 评分: 1.5

文档里有 quick fox → 评分: 3.0

文档里有 quick brown fox → 评分: 4.5

协调因子将评分与文档里匹配词的数量相乘,然后除以查询里所有词的数量,如果使用协调因子,评分会变成:

文档里有 fox → 评分: 1.5 * 1 / 3 = 0.5

文档里有 quick fox → 评分: 3.0 * 2 / 3 = 2.0

文档里有 quick brown fox → 评分: 4.5 * 3 / 3 = 4.5

协调因子能使包含所有三个词的文档比只包含两个词的文档评分要高出很多。

3,字段长度归一值:字段越短,相关性越高。

4,字段权重:默认每个字段的权重是相同的,但是在实际的生产环境中,标题的权重大于正文,所以,我们可以单独给默写字段提神权重来增加关键词和该字段的相关性分值。

5,boost:在查询时,指定某个分值查询的权重,同样也能影响最后的相关性分值

以上的等等因素的组合,计算出搜索的关键词相对于这个文档的相关评分,看上去有些复杂,但是每个点都是必不可少的,在计算的过程中都占了相当的比重!

相关文章: