elasticsearch 验证我对elasticsearch中Demax查询的理解,elasticsearch,lucene,search-engine,dismax,elasticsearch,Lucene,Search Engine,Dismax" /> elasticsearch 验证我对elasticsearch中Demax查询的理解,elasticsearch,lucene,search-engine,dismax,elasticsearch,Lucene,Search Engine,Dismax" />

elasticsearch 验证我对elasticsearch中Demax查询的理解

elasticsearch 验证我对elasticsearch中Demax查询的理解,elasticsearch,lucene,search-engine,dismax,elasticsearch,Lucene,Search Engine,Dismax,我已经试着理解了Demax查询是如何工作的,我想验证我的理解,请看我是否正确理解了它 根据文档,Demax查询是: "dis_max": { "queries": [ { "match": { "FOO": "ABC" } }, { "match": { &quo

我已经试着理解了Demax查询是如何工作的,我想验证我的理解,请看我是否正确理解了它

根据文档,Demax查询是:

 "dis_max": {
   "queries": [
     {
       "match": {
         "FOO": "ABC"
       }
     },
     {
       "match": {
         "FOO": "XYZ"
       }
     }
   ]
 }
}
一种查询,用于生成由其 子查询,并为每个文档的 由任何子查询生成的文档,加上一个中断连接 任何其他匹配子查询的增量

假设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”}
上评分,并将使用返回的最大分数,这将对所有文档的联合进行评分,最后以排序方式返回文档


这就是Demax查询的工作方式吗?还是我误解了或遗漏了什么?

我想你是对的,doc
{FOO:“ABC”}
会从
{match:{FOO:“ABC”}
中取分数,忽略
{match:{FOO:“XYZ”}
的分数。我通常看到此查询用于跨多个字段进行匹配,因为当您不确定用户查询的目标字段时,您可以返回多个字段中的最佳选项。谢谢@Nate,您现在可以添加答案。我想您已经有了答案!我没有什么新的贡献,我想你是对的,doc
{FOO:“ABC”}
会从
{match:{FOO:“ABC”}}
取分数,忽略
{match:{FOO:“XYZ”}
的分数。我通常看到此查询用于跨多个字段进行匹配,因为当您不确定用户查询的目标字段时,您可以返回多个字段中的最佳选项。谢谢@Nate,您现在可以添加答案。我想您已经有了答案!我没有什么新的贡献