这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。
"Name": "Real beef burritos", "Ingredients": [ {"name": "olive oil", "id": 27, "weight": 200}, {"name": "bonion","id": 3,"weight": 300}, {"name": "garlic", "id": 2, "weight": 100 }, {"name": "chilli powder", "id": 35, "weight": 150}, {"name": "coriander", "id": 40, "weight": 600}, {"name": "tortillas", "id": 41, "weight": 700} ],"Main_ingredient": { "type": "Beef", "id": 101, "weight": 1000 }}}
索引的映射是
{"final":{"mappings":{"superb":{"properties":{"Cook Time":{"type":"long"},"Ingredients":{"type":"nested","properties":{"id":{"type":"short"},"name":{"type":"string"},"type":{"type":"string"},"weight":{"type":"short"}}},"Main_ingredient":{"properties":{"id":{"type":"long"},"type":{"type":"string"},"weight":{"type":"long"}}},"Name":{"type":"string"},"Prep Time":{"type":"long"},"Servings":{"type":"long"},"Tags":{"type":"string"},"Urls":{"type":"string"},"Views":{"type":"long"}}}}}}
我的查询是
{ "query": { "bool": { "must": [ { "match": { "Main_ingredient.type": "Beef" }}, {"range":{"Main_ingredient.weight":{"lte":1000}}}, { "nested": { "path": "Ingredients", "query": { "bool": { "must": [ { "match": { "Ingredients.name": "garlic" }}, { "range": { "Ingredients.weight":{"lte":400} }}, { "match": { "Ingredients.name": "chilli powder" }}, { "range": { "Ingredients.weight":{"lte":400} }} ] }}}} ] }}}
但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询
试试这个:
{ "query": { "bool": { "must": [ { "match": { "Main_ingredient.type": "Beef" } }, { "range": { "Main_ingredient.weight": { "lte": 1000 } } }, { "nested": { "path": "Ingredients", "query": { "bool": { "must": [ { "match": { "Ingredients.name": "garlic" } }, { "range": { "Ingredients.weight": { "lte": 400 } } } ] } } } }, { "nested": { "path": "Ingredients", "query": { "bool": { "must": [ { "match": { "Ingredients.name": "chilli powder" } }, { "range": { "Ingredients.weight": { "lte": 400 } } } ] } } } } ] } } }