gpt4 book ai didi

python - 在Elasticsearch中查询嵌套对象

转载 作者:行者123 更新时间:2023-12-03 01:06:54 25 4
gpt4 key购买 nike

我有一个产品商人映射,如下所示

  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”,但这没有帮助。

如何从商人的整个“目录”索引中选出一个对象的信息?

最佳答案

一旦您的 bool查询具有必须子句,则其中的所有条件都是必需的。如果不需要子句,则内部的条件不是必需的。他们只会提高结果。 (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html#query-dsl-bool-query)

因此,返回您的查询,它将检索与商人名称“Sir John”相匹配的所有目录。这是唯一必需的(必须)条件。名称“Vanilla”只会将名称“Vanilla”放在顶部,因为它不是必需的。

如果要检索“爵士先生”出售的“ Vanilla ”,请将两个条件都放在must子句中,并将查询更改为此:

{
"query": {
"bool": {
"must": [
{
"match": {
"merchant_name": {
"query": "Sir John"
}
}
},
{
"match": {
"product_name": {
"query": "Vanilla"
}
}
}
]
}
}
}

关于python - 在Elasticsearch中查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26957437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com