3

如何将列表作为查询字符串传递给 match_phrase 查询?

这有效:

{“match_phrase”:{“requestParameters.bucketName”:{“query”:“xxx”}}},

这不会:

        {
            "match_phrase": {
                "requestParameters.bucketName": {
                    "query": [
                        "auditloggingnew2232",
                        "config-bucket-123",
                        "web-servers",
                        "esbck-essnap-1djjegwy9fvyl",
                        "tempexpo",
                    ]
                }
            }
        }
4

1 回答 1

2

match_phrase根本不支持多个值。

您可以使用should查询:

GET _search
{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "requestParameters.bucketName": {
              "value": "auditloggingnew2232"
            }
          }
        },
        {
          "match_phrase": {
            "requestParameters.bucketName": {
              "value": "config-bucket-123"
            }
          }
        }
      ]
    },
    ...
  }
}

或者,正如@Val 指出的,一个terms查询:

{
  "query": {
    "terms": {
      "requestParameters.bucketName": [
        "auditloggingnew2232",
        "config-bucket-123",
        "web-servers",
        "esbck-essnap-1djjegwy9fvyl",
        "tempexpo"
      ]
    }
  }
}

确切地说,它的功能就像一个OR

我假设 1)有问题的存储桶名称是唯一的,并且 2)您不是在寻找部分匹配项。如果是这样,再加上现场几乎没有设置任何分析仪bucketNamematch_phrase甚至可能不需要!terms会做得很好。term和查询之间的区别在这里match_phrase很好地解释

于 2021-01-06T18:39:00.633 回答