次のような製品と販売者のマッピングがあります
catalog_map = {
"catalog": {
"properties": {
"merchant_id": {
"type": "string",
},
"products": {
"type": "object",
},
"merchant_name" :{
"type" : "string"
}
}
}
}
「製品」には、product_id、product_name、product_price などのオブジェクトがあります。製品と販売者は、次のようにマッピングされます。
for merchant in Merchant.objects.all() :
products = [{"product_name" : x.product.name, "product_price" : x.price, "product_id" : x.product.id , "product_category" : x.product.category.name} for x in MerchantProductMapping.objects.filter(merchant=merchant)]
tab = {
'merchant_id': merchant.id,
'merchant_name': merchant.name,
'product': products
}
res = es.index(index="my-index", doc_type='catalog', body=tab)
データは、目的の形式でスムーズにインデックス付けされます。ここで、特定のインデックスからデータをクエリするときは、次の方法で行います。
GET /esearch-index/catalog/_search
{
"query": {
"bool" :{
"must": [
{"match": {
"merchant_name": {
"query": "Sir John"
}
}}],
"should": [
{"match": {
"product_name": {
"query": "Vanilla"
}
}}
]
}}
このクエリは、マーチャント名が "Sir John" のインデックス内のすべての製品の結果を返します。ただし、代わりに「Sir John」が販売する商品「Vanilla」の詳細を返してほしい。
誰かの推薦で、クエリ中に「_source」を使用しましたが、それは役に立ちません。
マーチャントの「カタログ」インデックス全体から 1 つのオブジェクトの情報を抽出するにはどうすればよいですか?