【问题标题】:Elasticsearch with nested AND/OR query带有嵌套 AND/OR 查询的 Elasticsearch
【发布时间】:2019-06-07 17:18:29
【问题描述】:

我正在努力编写具有多个 AND/OR 条件的弹性搜索查询。

基本上是这样的逻辑: cond1 && (cond2 || cond3 || cond4)

正如docs 中提到的,如果文档仅满足 must 子句,则该文档被视为匹配。在这种情况下,should 子句起到了助推作用,即如果一个文档除了 must 子句之外还匹配一个或多个 should 子句,那么它将具有更高的相关性分数,假设 cond2、cond3 和 cond4 是计算 a相关性得分。

问题是我只想要至少也匹配 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"
                    }
                }
            ]
        }
    }
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    只有在没有 must 查询的情况下,should 查询才能像 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"
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      相关资源
      最近更新 更多