如何在elasticsearch中搜索单个值

How to search single value in elasticsearch

我在 elasticsearch 中有 2 个文档:

{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}

然后我这样查询:

{
    "query": {
        "bool": {
            "must": [{
                "term": {
                    "a": "123"
                }
            }]
        }
    }
}

这是我得到的:

{"_id": "1", "a": "123"}
{"_id": "2", "a": ["123", "456"]}

知道 elasticsearch 原生支持多值字段,所以它们都被显示了。 但我只想要第一个条目,它的id是“1”:

{"_id": "1", "a": "123"}

如何实现?

使用脚本

您可以使用脚本来 return 数组大小为 1 的文档。如果不存在具有单个值的文档,则 "will not" return 具有多个值的文档。无法获得下一个最小尺寸匹配文档。这必须在客户端处理

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "a": "123"
          }
        },
        {
          "script": {
            "script": "if(doc['a.keyword'].size()==1) return true;"
          }
        }
      ]
    }
  }
}