我尝试了解 dismax 查询的工作原理,我想验证我的理解,请查看我是否理解正确。
根据文档,dismax 查询是:
一个查询,它生成由其子查询生成的文档的联合,并使用任何子查询生成的该文档的最大分数对每个文档进行评分,加上任何其他匹配子查询的平局增量。
假设,我们的 ES 集群中的总文档如下:
{"FOO":"ABC"},{"FOO":"XYZ"},{"FOO":"ABC XYZ"},{"FOO":"ABC DEF"},{"FOO":"DEF"}
并且 dismax 查询是:
"dis_max": {
"queries": [
{
"match": {
"FOO": "ABC"
}
},
{
"match": {
"FOO": "XYZ"
}
}
]
}
}
因此,根据文档,让我们首先找出 dismax 的子查询返回的文档的联合。文件的联合将是{"FOO":"ABC"},{"FOO":"XYZ"},{"FOO":"ABC XYZ"},{"FOO":"ABC DEF"}
. 根据下一步,我们需要使用任何子查询产生的该文档的最高分数对每个文档进行评分。这将是这样的:
{"FOO":"ABC"}
将被计分,{"match":{"FOO": "ABC"}}
并{"match":{"FOO": "XYZ"}}
使用返回的最高分。同样,{"FOO":"XYZ"}
将在 和 上进行评分,{"match":{"FOO": "ABC"}}
并将{"match":{"FOO": "XYZ"}}
使用返回的最大分数,这将对所有文档并集进行,最后文档将以排序方式返回。
这是 dismax 查询的工作原理吗?还是我误解或错过了什么?