2017-09-18 1 views
1

elasticsearchでアイテムバリアントを使用し、バリアントグループの1つのアイテムのみを取得する最良の方法は何ですか?例えばElasticSearchのアイテムバリエーション

、のは、私は以下のアイテムを持っているとしましょう:

[{ 
 
    "sku": "abc-123", 
 
    "group": "abc", 
 
    "color": "red", 
 
    "price": 10 
 
    }, 
 
    { 
 
    "sku": "def-123", 
 
    "group": "def", 
 
    "color": "red", 
 
    "price": 10 
 
    }, 
 
    { 
 
    "sku": "abc-456", 
 
    "group": "abc", 
 
    "color": "black", 
 
    "price": 20 
 
    } 
 
]

最初の項目と最後のものは同じグループに属しているので、私はそれらの一方のみを返すようにしたいです私が20の価格(例えば)以下の項目を照会するが、最高のヒット得点がある場合。

それに応じてドキュメントの設計とクエリを自由に提案できます。

+0

地図を共有してください。 –

答えて

2

マッピングがNested datatypeの場合は、これを使用して検索できます。

GET index/type/_search 
{ 
    "size": 2000, 
    "_source": false, 
    "query": { 
    "bool": { 
     "filter": { 
     "nested": { 
      "path": "childs", 
      "query": { 
      "bool": { 
       "filter": { 
       "term": { 
        "childs.group.keyword": "abc" 
       } 
       } 
      } 
      }, 
      "inner_hits": {} 
     } 
     } 
    } 
    } 
}