2016-04-22 82 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

相關問題