首页 > 解决方案 > 如何使用 AND 条件编写 ElasticSearch 查询

问题描述

我正在尝试编写一个弹性搜索查询来搜索具有两个条件的数据,如下所示

{
  "query": {
    "match": {
      "trackingId": "track4324234234244",
      "log_message": "downstream request-response"
    }
  }
}

上述查询不起作用,因为 [match] 查询不支持多个字段。有没有办法我可以做到这一点。

标签: elasticsearch

解决方案


您可以使用Bool query,其中可以使用must子句。

must表示:子句(查询)必须出现在匹配的文档中。这些子句必须匹配,例如逻辑 AND。

要了解 must 和 should 之间的区别,请参考这个SO answer

添加带有示例文档和搜索查询的工作示例

索引样本数据:

{
    "trackingId":"track4324234234244",
    "log_message":"downstream request-response"
}
{
    "trackingId":"track4324234234244",
    "log_message":"downstream"
}
{
    "trackingId":"tracks4324234234244",
    "log_message":"downstream request-response"
}

搜索查询:

    {
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "trackingId": "track4324234234244"
          }
        },
        {
          "match": {
            "log_message": {
              "query": "downstream request-response",
              "operator": "and"
            }
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
        {
            "_index": "my_index",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.8570712,
            "_source": {
                "trackingId": "track4324234234244",
                "log_message": "downstream request-response"
            }
        }
    ]

推荐阅读