gpt4 book ai didi

elasticsearch - Elasticsearch _search与_count语法

转载 作者:行者123 更新时间:2023-12-02 22:47:19 29 4
gpt4 key购买 nike

似乎_search和_count采用不同的查询格式。例如,这是我的_search查询:

{
query: {
filtered: {
query: { match: { Name: "bob" } },
filter: { term: { GroupIds: 3 } }
}
}
}

但是为了使 _count理解它,我需要删除外部的 query:
{
filtered: {
query: { match: { Name: "bob" } },
filter: { term: { GroupIds: 3 } }
}
}

那将无法使用 _search。为了进一步让我感到困惑,如果同时删除了 _search queryfiltered将接受它:
{
query: { match: { Name: "bob" } },
filter: { term: { GroupIds: 3 } }
}

那么,使用 _search_count时查询DSL的实际规则是什么?

最佳答案

搜索是Elasticsearch中最复杂的操作之一,因此它在顶层接受几个不同的参数,包括queryfilterfacetssize等。
query参数应包含查询DSL定义的查询。它可以是任何查询,包括match_allfiltered。例如,这是接受所有记录并返回前20位的搜索请求的样子。

{
"query": {
"match_all": {}
},
"size": 20
}

搜索请求中的 filter参数可以接受过滤器(同样在查询DSL中定义)。该过滤器在搜索中具有特殊功能-它不会影响请求中的任何方面。因此,通常,当您要过滤搜索结果但又不想影响构面时,仅将 filter参数仅用于构面搜索是有意义的。在所有其他情况下, filtered查询通常会产生更快的结果。

谈到这点, filtered查询是一个查询,因此可以在搜索请求的 query参数中使用它。这也是一个复合查询。它在其 query参数中接受另一个查询,并在其 filter参数中接受一个过滤器,并生成一个复合查询,该复合查询仅返回同时满足该查询及其组成的过滤器的文档。换句话说, filter查询中的 filtered参数同时影响搜索结果和构面,而 filter查询中的 search参数仅影响搜索结果而不影响构面。

最后是 count请求。 count请求比 search请求简单得多。它不适用于构面,并且size参数实际上没有多大意义,因为我们始终要求完整计数。因此, count请求所期望的只是一个顶级查询。例如,为了计算所有文档, count请求将包含以下内容:
{
"match_all": {}
}

关于elasticsearch - Elasticsearch _search与_count语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492055/

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