2016-04-22 8 views
0

私はelasticsearchに名前フィールドをインデックスしようとしましたが、その名前は文字列か空の文字列("")であるため、空の値を含むすべての名前を検索したいのでexistsフィルタを使用しますが、空の値はNULL値ではありません。Elasticsearch exists空の文字列をnull値にする方法をフィルタしますか?

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

クエリDSL:elasticsearch existフィルタのNULL値として空の文字列にする方法

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

?誰でも良い考えがありますか?

+0

:ちょうどより詳細な答えを持っているこの同様の問題を発見しました。 '" filter ":{" missing ":{" field ":" name "}}' – Toni

答えて

1

の長さをテストするために、代わりにscriptフィルタを使用して検索してみてくださいすることができます

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

はいくつかでそれを試してみましたあなたのフィールドが「分析されていない」(私のような)かどうかに依存するかもしれません。

更新:あなたが不足しているフィルタを組み合わせることができますFind documents with empty string value on elasticsearch

+0

'exists'フィルタを使いたいと思います。 – pangpang

0

あなたは、長期フィルタが仕事をする必要がある文字列

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

スクリプトは遅く、可能な限り避けるべきです。 – Sebastian

+1

Sebastianは正しいです、彼のソリューションは最高です...あなたが 'not_analyzed'フィールドを持っている場合にのみ、そうでなければ動作しません。 – Val

関連する問題