2016-04-22 265 views
0

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

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

查询DSL:

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

如何让空字符串作为elasticsearch exist过滤空值?任何人都有好主意?

+0

您可以结合缺少过滤器。 '“filter”:{“missing”:{“field”:“name”}}' – Toni

回答

1

术语过滤器应该做的工作搜索:

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

一些刚刚试了一下我的数据和结果,但可能取决于如果你的领域是“未分析”(如我的)或不。

更新:刚发现它有一个更详细的回答这个类似的问题:Find documents with empty string value on elasticsearch

+0

我希望使用'exists'过滤器。 – pangpang

0

您可以尝试使用script过滤器,而不是为了测试该字符串的长度

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

脚本很慢,应尽可能避免。 – Sebastian

+1

塞巴斯蒂安是对的,他的解决方案效果最好......只有当你有'not_analyzed'字段时,否则它将无法工作。 – Val

相关问题