这可能是一个重复的问题,但我没有找到'一个很好的解决方案。
我试图搜索elasticsearch以获取包含以下内容的文档:
- "event":"myevent1"
- "event":"myevent2"
- "event":"myevent3"
文档不得在同一文档中包含所有文档,但结果应仅包含仅包含这些类型事件的文档。
这很简单,因为elasticsearch帮助我完成should
条款
这正是我想要的。
但是,我希望所有文档必须包含另一个条件,我想要字段result.example.example = 200
,这必须在每个文档中,并且文档应该是之前描述的"event"
中的一个。
因此,例如,文档包含"event":"myevent1"
和result.example.example = 200
另一个文档包含"event":"myevent2"
和result.example.example = 200
等等。
我已尝试过此配置:
{
"query": {
"bool": {
"must":{"match":{"operation.result.http_status":200}},
"should": [
{
"match": {
"event": "bank.account.patch"
}
},
{
"match": {
"event": "bank.account.add"
}
},
{
"match": {
"event": "bank.user.patch"
}
}
]
}
}
}
但不起作用因为我也得到不包含1字段的文档。
希望我解释得很好, 提前谢谢!答案 0 :(得分:1)
按原样,您的查询会告诉ES查找必须具有"operation.result.http_status":200
的文档并提升那些具有匹配事件类型的文档。
您希望合并两个must
个查询
event
子句接受多个值,这些值是完全匹配的:您正在寻找terms
query。
尝试
{
"query": {
"bool": {
"must": [
{"match":{"operation.result.http_status":200}},
{
"terms" : {
"event" : [
"bank.account.patch",
"bank.account.add",
"bank.user.patch"
]
}
}
]
}
}
}