[英]Querying nested objects in Elasticsearch
我有一個Product-Merchant映射,如下所示
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”的索引中所有產品的結果。 但是, 我希望它返回“爵士先生”出售的“香草”產品的詳細信息。
根據某人的建議,我在查詢時使用了“ _source”,但這沒有幫助。
如何從商家的整個“目錄”索引中選出一個對象的信息?
一旦布爾查詢具有must子句,則其中的所有條件都是必需的。 should子句中的條件不是必需的。 他們只會提高結果。 ( http://www.elasticsearch.org/guide/zh-CN/elasticsearch/reference/current/query-dsl-bool-query.html#query-dsl-bool-query )
因此,返回您的查詢,它將檢索與商人名稱“ Sir John”相匹配的所有目錄。 這是唯一必需的(必須)條件。 名稱“ Vanilla”只會將名稱頂部為“ Vanilla”的結果提高,因為這不是必需的。
如果要檢索“爵士先生”出售的“香草”,請將兩個條件都放在must子句中,並將查詢更改為此:
{
"query": {
"bool": {
"must": [
{
"match": {
"merchant_name": {
"query": "Sir John"
}
}
},
{
"match": {
"product_name": {
"query": "Vanilla"
}
}
}
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.