2016-11-17 13 views
1

検索とフィルタリングの単一のクエリを実現したいと考えています。しかし、私がフィルタリングを適用したときに予想されるように、フィルタ条件はすべてのタイプに適用されたので、フィルタリングされたプロパティと値を持つドキュメントの結果のみを得ました。例えばElasticSearch NEST - 複数のタイプを検索しますが、選択したタイプのみにフィルタを適用します。

ここで私は製品タイプのみのようなフィールドが含まれているので、ここで私は製品タイプの結果だけを得た3種類(製品、カテゴリー、メーカー)

GET /my-index/Product,Category,Manufacturer/_search 
{ 
    "query": { 
     "filtered": { 
      "query": {...}, //--> Search a word which present in all types 
      "filter": { 
       "term": { 
        "ProductField": "VALUE" 
       } 
      } 
     } 
    } 
} 

で検索'ProductField'、値は'VALUE'です。ある何私が期待してい

、単一のクエリと、検索クエリを満たすだけの製品にフィルタリングを適用することを、すべての種類の結果(製品、カテゴリー、メーカー)を取得します。

だから私の疑問は

であるだけでは、すべてのタイプに適用するよりも、特定のタイプに 検索結果をフィルタリング適用する弾性検索のいずれかの方法はありますか?

答えて

2

はい、typeクエリを使用して正確に達成できます。フィルタでは、我々は他の条件なしCategoryManufacturerのいずれかを選択するbool/should句、またはProductField: VALUEを持つProduct書類を持っている:

POST /my-index/Product,Category,Manufacturer/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {}, 
     "filter": { 
     "bool": { 
      "minimum_should_match": 1, 
      "should": [ 
      { 
       "type": { 
       "value": "Category" 
       } 
      }, 
      { 
       "type": { 
       "value": "Manufacturer" 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { 
        "type": { 
         "value": "Product" 
        } 
        }, 
        { 
        "term": { 
         "ProductField": "VALUE" 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

はフィルターで製品以外の型に言及することが必須で、一つの疑問をありがとうクエリ?あなたがリクエストにすべてを追加したので、あなたがカテゴリとメーカーをshouldブロックに追加したのと同じようにUri | POST/my-index/Product、Category、Manufacturer/_search – LMK

+0

'minimum_should_match'節を削除せずに削除してください。そうでなければ動作しません。 – Val

+0

確かに..........(y) – LMK

関連する問題