elasticsearch_search与_count语法

似乎_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 } }

}

那么使用_searchvs. 时查询DSL的实际规则是什么_count

回答:

搜索是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_search与_count语法 的全部内容, 来源链接: utcz.com/qa/435081.html

回到顶部