gpt4 book ai didi

json - 在数组对象中搜索

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

我有以下json对象-

{
"Title": "Terminator,
"Purchases": [
{"Country": "US", "Site": "iTunes"},
{"Country": "FR", "Site": "Google"}
]
}

给定上述对象,以下是搜索结果显示产量的方式:
"Titles on iTunes in US" ==> YES, show "Terminator"
"Titles on Google in FR" ==> YES, show "Terminator"
"Titles on iTunes in FR" ==> NO

但是,如果我只对查询进行 AND编码,而要获得 Purchase.Country="FR"的Titles和 Purchase.Site="iTunes"的Titles,则由于同时满足两个条件,因此会错误地显示上述结果。但是,我想将该方面限制为购买项目中的 。 python代码中的等效项为:
for purchase in item['Purchases']:
if purchase['Country'] == "FR" and purchase['Site'] == "iTunes":
return True

目前,它的工作方式如下:
for purchase in item['Purchases']:
if purchase['Country'] == "FR":
has_fr = True
if purchase['Site'] == "iTunes":
has_itunes = True
if has_itunes and has_fr: return True

在ElasticSearch中如何完成?

最佳答案

首先,您需要通过定义对象类型的映射,将“购买”字段索引为嵌套字段:

{
"properties" : {
"Purchases" : {
"type" : "nested",
"properties": {
"Country" : {"type": "string" },
"Site" : {"type": "string" }
}
}
}
}

只有这样,ElasticSearch才会保持各个国家和各个站点之间的关联,如 here所述。

接下来,您应该使用嵌套查询,例如:
{ "query": 
{ "nested" : {
"path" : "Purchases",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{
"match" : {"Purchases.Country" : "US"}
},
{
"match" : {"Purchases.Site" : "iTunes"}
}
]
}
}
}
}
}

如果查询结合了“US”和“iTunes”,它将返回您的对象,但如果结合了“US”和“Google”,则不会返回对象。详细信息 here

关于json - 在数组对象中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31469630/

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