最初,我会filter
在 bool 查询中添加一个。但是,当我转向 时terms filter
,文件表明现在应该更换它terms query
。所以我理解这一点,因为我们需要用 和 构造一个复合terms query
查询bool query
。如果我是正确的,我应该如何编写查询?
注意:我使用 elasticsearch 的 Python API。
最初,我会filter
在 bool 查询中添加一个。但是,当我转向 时terms filter
,文件表明现在应该更换它terms query
。所以我理解这一点,因为我们需要用 和 构造一个复合terms query
查询bool query
。如果我是正确的,我应该如何编写查询?
注意:我使用 elasticsearch 的 Python API。
现在有两种类型的上下文:查询上下文和过滤上下文。查询上下文中的任何查询子句都会影响匹配文档的分数,即文档匹配查询的程度,而过滤上下文中的任何查询子句确定文档是否匹配并且不影响分数。
因此,在下面的查询中,我标记了两个上下文:
{
"query": {
"bool": {
"must": [
{ "match": { "field1": "terms1"}}, <------query context
],
"filter": [
{ "terms": { "someId": [3242, 12343, 1234] }}, <-------inside filter block every query clause will act as filter (filter context)
]
}
}
}
因此,为了使用术语查询作为过滤器,您需要遵循以下步骤:
boolQuery
termsQuery
termsQuery
到过滤器boolQuery
。boolQuery
为查询。这转化为以下内容:
{
"query": {
"bool": {
"filter": [
{
"terms": {
"field1": ["terms1", "term2", "terms3"]
}
}
]
}
}
}