原文地址:https://gitbook.cn/books/5e572c3d4d2b8f73fbc8e6ea/index.html


    一般情况,相关度都是指计算全文的 field 的内容与全文 query 串的相关度。

    下面是决定了 Elasticsearch 中的决定文档得分的处理要素:

    • 词频(TF:Term Frequency:词频是对一个词在文档的内容中出现次数的计量。如果出现次数多,得分就高,该文档与查询相关的可能性就高。
    • 逆文档频率(IDF):逆文档频率是对搜索的词在文档集中出现的频率的衡量。如果一个搜索词在很多文档中都普遍地出现,(这个词)的得分就比较低。那种稀有词如果在文档中频繁出现,会把评分值 boost 的较高。
    • 共现因子(Coord):共现因子是对出现多个搜索词的衡量,query中的词共现的越多,整体的得分就越高。比如搜索这两个词“woolen(羊毛)”&“jacket(夹克)”。两个词放在一起搜也没啥问题:在内部会转化为 bool 查询,每个词都会单独的去搜索。两个词都包含的文档比那些只包含一个词的文档得分高。如果你给 query 的权重是 2,那么两个词都包含的词的 coord 是22=4。只包含一个词的coord权重就是 21=2。
    • 长度标准化(lengthnorm):会衡量短 field 的匹配,给出更高的权重。Lucene 考虑了文章的长度,因为考虑到更长的文章会包含更多的词,从而通过 lengthnorm 进行标准化。所以 Lucene 会更偏向于短标题。比如 title,短文本的标准化因子 0.5,而较长的标题可能只有 0.01。所以标准化因子可能极大的影响得分。比如,如果搜索词在 title 中,那它比在 content 中更相关,得分更高。
    • Query 标准化(querynorm):虽然不直接与文档相关度相关,querynorm 在你对 query 类型的组合时,可以对 query 进行衡量。
    • Index 时 boost(index time boost)&Query 时 boost(query time boost):可以在索引时和查询时进行 boost。对特定的 field 进行 boost 时,会让得分的计算更加明显。
    • Lucene 的评分计算:默认的 ES 的得分算法是布尔检索与空间向量模型的组合。通过布尔模型的文档会通过空间向量模型进行下一步的评分计算。