gpt4 book ai didi

elasticsearch - 在Elasticsearch中,如何从多层嵌套对象的多个字段中搜索字符串

转载 作者:行者123 更新时间:2023-12-02 23:15:41 29 4
gpt4 key购买 nike

在Elasticsearch 6中,我具有带有嵌套对象的数据,如下所示:

{
"brands" :
[
{
"brand_name" : "xyz",
"products" :
[
{
"title" : "test",
"mrp" : 100,
"sp" : 90,
"status" : 1
},
{
"title" : "test1",
"mrp" : 50,
"sp" : 45,
"status" : 1
}
]
},
{
"brand_name" : "aaa",
"products" :
[
{
"title" : "xyz",
"mrp" : 100,
"sp" : 90,
"status" : 1
},
{
"title" : "abc",
"mrp" : 50,
"sp" : 45,
"status" : 1
}
]
}
]
}

我想从字段brand_name或字段标题中进行搜索。我想以相同的inner_hits返回所有结果。

例如:如果我将搜索字符串输入为“xyz”,则应返回两个品牌对象和相应的产品对象。
如果我将搜索字符串输入为“test”,则它应仅返回只有第一个产品对象的第一个品牌数组。

我该如何实现。有任何想法吗?

我已经尝试过像这样的嵌套路径查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "brands",
"query": {
"bool": {
"should": [
{
"term": {
"brands.brand_name": "xyz"
}
},
{
"term": {
"brands.brand_name.keyword": "aaa"
}
},
{
"nested": {
"path": "brands.products",
"query": {
"bool": {
"should": [
{
"match": {
"brands.products.title": "xyz"
}
}
]
}
},
"inner_hits": {}
}
}
]
}
},
"inner_hits": {}
}
}
]
}
}
}

但是,此查询返回的多个inner_hits响应包含每个品牌和每个产品的多个数组对象。

我希望与字符串匹配的所有品牌名称的响应都应在一个数组下列出,所有产品应在同一inner_hits下在另一个数组下列出。

最佳答案

由于您希望内部匹配根据匹配发生的位置(即brands.brand_namebrands.products.title)而有所不同,因此您可以有两个查询,一个查询品牌名称,另一个查询产品标题,作为独立的嵌套查询。然后,这些查询应位于should查询的bool子句内。每个嵌套查询应具有自己的inner_hits,如下所示:

{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "brands",
"inner_hits": {},
"query": {
"term": {
"brands.brand_name.keyword": "test"
}
}
}
},
{
"nested": {
"path": "brands.products",
"inner_hits": {},
"query": {
"term": {
"brands.products.title": "test"
}
}
}
}
]
}
},
"_source": false
}

关于elasticsearch - 在Elasticsearch中,如何从多层嵌套对象的多个字段中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55371632/

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