2017-12-01 14 views
1

私は、オブジェクトの配列を持つElasticSearchクエリを実行し、その配列内のすべての項目が一致する条件をフィルタリングする必要があります。ここに私のマッピングは次のとおりです。ここでElasticSearchクエリは、すべてのフィールドが自分のフィルタと一致する場合にのみ結果を取得しますか?

PUT myindex 
{ 
    "mappings": { 
    "myindexType":{ 
     "dynamic": "strict", 
     "_all":{ 
     "enabled": false 
     },  
     "properties":{ 
     "thisthing": { 
      "properties": { 
      "thingTypeId": { 
       "type": "keyword" 
      }, 
      "thingId": { 
       "type": "keyword" 
      } 
      } 
     }, 
     "description": { 
      "type": "keyword" 

     }, 
     "text": { 
      "type": "text" 
     } 
     } 
    } 
    } 
} 

は私のインデックス付きデータである:

POST myindex/myindexType 
{ 
    "thisthing": [ 
      { 
       "thingId": "1", 
       "thingTypeId": "42" 
      }, 
      { 
       "thingId": "1", 
       "thingTypeId": "43" 
      }, 
      { 
       "thingId": "1", 
       "thingTypeId": "44" 
      } 

      ], 
    "description":"something", 
    "text":"something" 


} 

そして、ここでは、私がこれまで持っているクエリは次のとおりですので、

GET _search 
{"query": { 
    "bool": { 
     "must": [ { 
      "match": { 
       "text": { 
        "query": "something", 
        "fuzziness": "Auto", 
        "operator": "and" 
        } 
       } 
      } 
     ], 
     "filter": [ 
      {"term": {"thisthing.thingTypeId": "42" } }, 
      {"term": {"thisthing.thingTypeId": "43" } } 

     ] 
}}} 

私のクエリは、結果を持ち帰りますids 42と43の両方が索引付きデータに存在します。しかし、索引付けされたデータのすべてのIDがフィルタに存在しない限り、結果を返さないクエリが必要です。用語と用語の両方のフィルターでこれを運を使わずに試しました。

答えて

0

問題を解決するために、配列内のネストされたオブジェクトを使用します。 Hereあなたのケースの良い説明を見つけることができます。

+0

返信いただきありがとうございますが、その記事がどのように問題を解決しているかわかりません。たとえば、1,2,3のIDを持つクエリがあるとします。索引にはデータ1,2,3,4があります。データにはクエリに含まれていないIDがあるため、クエリは結果を返すべきではありません。これまで見てきたすべての例では、クエリにはデータに含まれるIDが含まれているため、結果が返されます。私は実際に反対を望む。ありがとう,,, – suwatechie

関連する問題