Elasticsearch 存在过滤器如何将空字符串作为空值



我试图将名称字段索引到 elasticsearch,名称可能是字符串或空字符串( "" ),我想搜索所有包含空值的名称,所以我使用 exists 过滤器,但对于exists过滤器,空值不是空值。

https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-exists-filter.html

查询 DSL:

{ "filter" : {
                "exists" : { "field" : "name" }
            } 
}

如何将空字符串设置为弹性搜索exist过滤器的空值?有人有好主意吗?

术语过滤器应该完成这项工作:

    {
      "term": {
        "name": ""
      }
    }

刚刚尝试了我的一些数据并得到了结果,但可能取决于您的字段是否"未分析"(如我的)或否。

更新:刚刚找到了这个类似的问题,它有一个更详细的答案:在 elasticsearch 上查找具有空字符串值的文档

您可以尝试使用 script 筛选器进行搜索,以测试字符串的长度

{
  "query": {
    "script": {
      "script": "doc.name.value?.size() == 0"
    }
  }
}

最新更新