使用 must 和 match 过滤弹性搜索结果给出意外结果
Filtering Elastic search result with must and match giving unexpected result
{
"body": {
"query": {
"bool": {
"must": {
"match": {
"_id": "24"
}
},
"should": [
{
"term": {
"draft_id": "draft_11"
}
},
{
"term": {
"draft_id": "non_draft"
}
}
]
}
}
}
}
结果包含以下信息
{
"_id": "24",
"name": "xyz",
"draft_id": "draft_312"
}
要求
我想根据以下条件过滤记录:
- id 必须匹配
- 而draft_id应该是
non_draft
或draft_11
或者用简单的话来说
id = 24 AND (draft_id = "non_draft" OR draft_id = "draft_11")
如果你看到结果,它只匹配 id,而不匹配 draft_id 字段。
您需要将 should 子句移到 must_clause 中。只有子句在它们之间必须 "AND"
{
"query": {
"bool": {
"must": [
{
"match": {
"_id": "24"
}
},
{
"bool": {
"should": [
{
"term": {
"draft_id": "draft_11"
}
},
{
"term": {
"draft_id": "draft_11"
}
}
]
}
},
{
"query_string": {
"default_field": "FIELD",
"query": "this AND that OR thus"
}
}
]
}
}
}
{
"body": {
"query": {
"bool": {
"must": {
"match": {
"_id": "24"
}
},
"should": [
{
"term": {
"draft_id": "draft_11"
}
},
{
"term": {
"draft_id": "non_draft"
}
}
]
}
}
}
}
结果包含以下信息
{
"_id": "24",
"name": "xyz",
"draft_id": "draft_312"
}
要求
我想根据以下条件过滤记录:
- id 必须匹配
- 而draft_id应该是
non_draft
或draft_11
或者用简单的话来说
id = 24 AND (draft_id = "non_draft" OR draft_id = "draft_11")
如果你看到结果,它只匹配 id,而不匹配 draft_id 字段。
您需要将 should 子句移到 must_clause 中。只有子句在它们之间必须 "AND"
{
"query": {
"bool": {
"must": [
{
"match": {
"_id": "24"
}
},
{
"bool": {
"should": [
{
"term": {
"draft_id": "draft_11"
}
},
{
"term": {
"draft_id": "draft_11"
}
}
]
}
},
{
"query_string": {
"default_field": "FIELD",
"query": "this AND that OR thus"
}
}
]
}
}
}