【问题标题】:Elasticsearch match array usageElasticsearch 匹配数组使用
【发布时间】:2019-08-23 19:30:02
【问题描述】:

有没有办法编写一个匹配空数组和任何非空数组的查询?我不想匹配空值,也不关心缺少的字段。

我只想扫描我的所有字段,看看哪些字段可以返回一个数组。 谢谢!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    以下查询允许您检索数组字段不为空的文档:

    POST test/_search
    {
      "query": {
        "script": {
          "script": {
            "source": "doc.arr.value != null && doc.arr.size() > 0"
          }
        }
      }
    }
    

    请注意,使用 >=0 也会返回带有 null 数组的文档。

    检测具有空数组的字段更复杂,无法通过script 查询来实现,因为包含空数组的字段和包含 null 的字段之间没有区别。

    实现您想要的更好和更有效的方法是在索引时添加一个具有该数组长度的字段(例如,下面称为arrayLength)。这样您就可以在该字段上使用简单的range query

    POST test/_search
    {
        "query": {
            "range" : {
                "arrayLength" : {
                    "gte" : 0
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2016-10-10
      • 2020-04-27
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多