最初,我将在布尔查询中添加一个filter
。但是,当我转到terms filter
时,documents表示应立即将其替换为terms query
。因此,我理解这一点,因为我们需要使用terms query
和bool query
来构造复合查询。如果我是正确的,应该如何编写查询?
注意:我使用elasticsearch的Python API。
答案 0 :(得分:0)
现在有两种类型的上下文:query context and filter context。查询上下文内的任何查询子句都会对匹配文档的得分做出贡献,即文档与查询的匹配程度,而过滤器上下文内的任何查询子句都会确定文档是否匹配且不影响得分。
因此,在下面的查询中,我已经标记了两个上下文:
{
"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"]
}
}
]
}
}
}