何らかの種類の条件付きロジックを使ってドキュメントをフィルタリングする必要がありますが、私はこれを実行できません。弾性検索条件フィルタ
私の文書は、このようなものです: {type: 'A'} {type: 'B', foo: ['bar']} {type: 'B', foo: []}
今私はfoo
が空であるtype
「B」の全ての文書をフィルタリングする必要があります。 擬似コードでは、クエリは次のようになります。 if(type == 'B' && foo == []) { // filter out this document }
私のメイン・クエリは次のようになります。私は理解している場合 query: { filtered: { query: { bool: { must: { match_all: [] } } }, filter: { bool:{ must_not: { term: {'_hidden': true} } } } } }
Elasticsearchバージョンは1.5.0
Elasticsearchは空のフィールドを保存しません。私は存在しないフィールドについて話していると思いますよね?あなたはmust_notの中に存在するフィルタを使用できますか? https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-exists-filter.html 試しましたか? –
こんにちは@WaldemarNeto。はい、私は 'exists'フィルタと' missing'フィルタを使用しようとしました。 これは、タイプ 'B'のすべての文書に対して機能します。それは決して "プロパティ" fooがないので、タイプ 'A'のすべてのドキュメントもフィルタリングします。 –
タイプ== "A" fooは問題ではない、と理解していますか? == "B"と入力した場合、fooは空である必要がありますか? –