gpt4 book ai didi

elasticsearch - Elasticsearch:仅过滤时,为什么要使用过滤的查询类型

转载 作者:行者123 更新时间:2023-12-03 01:31:19 25 4
gpt4 key购买 nike

之间有什么区别

{
"query": {
"filtered": {
"filter": { "term": { "folder": "inbox" } }
}
}
}


{
"query": {
"term": { "folder": "inbox" }
}
}

似乎它们都通过 folder值过滤了 inbox字段上的索引。

最佳答案

在 flex 搜索中,查询可以具有两种类型的上下文。 Query上下文和filter上下文。查询上下文表明文档与查询的匹配程度,即计算分数,而过滤器上下文表明文档是否与查询匹配,并且不进行评分。

查询上下文中的查询会告诉您哪个文档与查询更匹配。分数越高,文档越相关。

过滤器上下文中的查询的行为类似于条件运算符,即如果文档与查询匹配,则为true ,否则为 false

为了回答您的问题,两个查询将匹配相同数量的文档,但是第一个查询将不计算分数(与第二个查询相比,它会更快,因为跳过了计分计算),而第二个查询将计算分数并将比第一个慢。因此,如果您只想过滤,最好告诉Elastic无需通过将查询放在过滤器上下文中来计算得分。这样,您可以节省计算分数的计算成本。如果仅需要过滤,则计算分数将是一项开销,因此存在两种类型的上下文。

第一个查询的示例输出(过滤器上下文):

{
"_index": "test",
"_type": "_doc",
"_id": "3",
"_score": 0, <-------- no scoring done
}

第二个查询(查询上下文)的示例输出:
{
"_index": "test",
"_type": "_doc",
"_id": "2",
"_score": 0.9808292 <-------- score calculated
}

因此,请使用查询上下文获取相关匹配项,并使用过滤器上下文过滤掉文档。您也可以将两者结合使用。

您可以阅读有关查询和过滤上下文 here的更多信息。

关于elasticsearch - Elasticsearch:仅过滤时,为什么要使用过滤的查询类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com