2016-12-09 11 views
1

Iきた私の文書で、次の配列構造:Elasticsearch(2.4)must_notフィルタと配列

"usages": [ 
    { 
    "type": 1, 
    "area": 207 
    }, 
    { 
    "type": 6, 
    "area": 629 
    }, 
    ... 
] 

どのように配列に一つだけの一致がある場合にドキュメントが返されないクエリを記述するには? 「タイプ」の試合があるので

このクエリでは、文書を返します。usage.type 1と3ではありません。のような2つのパラメータがある場合は6

"query": { 
    "bool": { 
     "must_not": [ 
      { 
       "term": { 
        "usages.type": 1 
       } 
      } 
     ] 
    } 
} 

そして、どのようにクエリがあります。

答えて

0

何について:

"query": { 
    "filtered": { 
    "filter": { 
     "bool": { 
     "must_not": [ 
      "match" { 
      "usages.type": 1 AND 3 
      } 
     ] 
     } 
    } 
    } 
} 

は私が(それゆえ「must_nを使用して、あなたが何をしたいの反対があるだけで私の結果で特定のIDを持つカテゴリを含めるに似たものを使用「OR」の代わりに「must」および「AND」の代わりに「ot」を使用します。

+0

同じ結果を - > "must_not":[{ "マッチ":{ "usages.type":1}}(またはANDせず)も、上述した文書を返します。 – mac866

+0

あなたは完全なクエリ(query/filtered/filter/bool/must_not/...)を置き換えたか、must_not以下の部分だけを置き換えましたか? – tavi

+0

私は "size":10、 "query":{"フィルタ":{"フィルタ":{"bool":{"must_not":[{"match":{"usages.type":1 [{"type":1、 "area":4184}、{"type":20、 "area":2683}]}}}}}}}}}}}}}}}} – mac866

2

ネストしたフィールドのように配列を記述しようとしましたか?あなたの問題を解決することがあり

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/nested.html

。 この例を参照してください:アレイ上must_notを使用して

PUT /my_index 
{ 
} 


PUT /my_index/_mapping/user 
{ 
    "properties": 
    { 
     "usage": 
     { 
      "type": "nested" 
     } 
    } 
} 


PUT /my_index/user/1 
{ 
    "usages": 
    [ 
     { 
      "type": 1, 
      "area": 207 
     }, 
     { 
      "type": 6, 
      "area": 629 
     } 
    ] 
} 


GET /my_index/_search 
{ 
    "query": { 
    "bool": { 
      "must_not": [ 
       { 
        "term": { 
         "usages.type": 1 
        } 
       } 
      ] 
     } 
    } 
} 
0

フィルタリングは、デフォルトで動作します。つまり、子オブジェクトがの場合、"type" : "nested"とマッピングされません。

ネストされたデータ型は、documentationで説明されているように、子オブジェクト(ex:type = 1およびarea> 50)の複数のプロパティの値を相互に関連付ける場合にのみ使用されます。

@Arthollはタイプミスの回答を提供しているため、ネストされたマッピングは正しく設定されません。ここで例を動作している:

PUT /my_index 


PUT /my_index/user/1 
{ 
    "usages": 
    [ 
     { 
      "type": 1, 
      "area": 207 
     }, 
     { 
      "type": 6, 
      "area": 629 
     } 
    ] 
} 


GET /my_index/_search 
{ 
    "query": { 
     "bool": { 
      "must_not": [ 
       { 
        "term": { 
         "usages.type": 6 
        } 
       } 
      ] 
     } 
    } 
} 
関連する問題