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的影响,最后得分可以不是整数。
反向文档频率:每个检索词在索引中出现的频率。频率越高,相关性越低。 检索词出现在多数文档中会比出现在少数文档中的权重更低, 即检验一个检索词在文档中的普遍重要性。