Bootstrap

Elasticsearch--constant_score

constant_score的用处

当我们不关心检索词频率TF(Term Frequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者过滤语句filter包装起来。

检索词频率:检索词在该字段出现的频率。出现频率越高,相关性也越高。字段中出现过5次要比只出现过1次的相关性高。

假设存在如下类型的文档:

{ "description": "wifi wifi garden pool" }

查询语句如下:

{
    "query":{
        "bool":{
            "should": [
                { "constant_score": {
                      "query": { "match": { "description": "wifi" }} }},
                { "constant_score": {
                      "query": { "match": { "description": "garden" }} }},
                { "constant_score": {
                      "query": { "match": { "description": "pool" }} }}
              ]
        }
    }
}

因为不考虑检索词频率,所以匹配文档的score等于该文档含有的不同检索词汇的个数。

score受到协调因子boost的影响:

{ "constant_score": {
    "boost":2,
    "query": { "match": { "description": "pool" }}
}}

出现pool的文档score加2。

score还需要考虑反向文档频率IDF的影响,最后得分可以不是整数。

反向文档频率:每个检索词在索引中出现的频率。频率越高,相关性越低。 检索词出现在多数文档中会比出现在少数文档中的权重更低, 即检验一个检索词在文档中的普遍重要性。

;