我正在努力编写具有多个AND / OR条件的弹性搜索查询。
基本上,它涉及以下逻辑:
cond1 && (cond2 || cond3 || cond4)
如docs中所述,如果文档仅满足must子句,则将其视为匹配项。在这种情况下,should子句起到了促进作用,即,如果文档除must子句之外还与一个或多个should子句匹配,则假设cond2,cond3和cond4是计算相关性得分。
问题是我只希望文档也符合至少一个OR条件。
请注意,我正在运行ES6.3。我也尝试过Multiword queries,但这些结果也是错误的。
添加boost似乎不会影响结果,我得到的结果仅符合第一个条件。
{
"query": {
"bool": {
"must": [
{
"term": {
"event.keyword": {
"value": "webhook.trigger"
}
}
}
],
"should": [
{
"match": {
"metaData.webhook.title": "My Example Title 1"
}
},
{
"match": {
"metaData.webhook.title": "Testing"
}
},
{
"match": {
"metaData.webhook.url": "myurl.com"
}
}
]
}
}
}
答案 0 :(得分:2)
仅当没有should
查询时,must
查询才能像 OR 一样工作。在您的情况下,您应该将should
查询换成另一个bool
查询。
{
"query": {
"bool": {
"must": [
{
"term": {
"event.keyword": {
"value": "webhook.trigger"
}
}
},
{
"bool": {
"should": [
{
"match": {
"metaData.webhook.title": "My Example Title 1"
}
},
{
"match": {
"metaData.webhook.title": "Testing"
}
},
{
"match": {
"metaData.webhook.url": "myurl.com"
}
}
]
}
}
]
}
}
}```