gpt4 book ai didi

elasticsearch - 在 ElasticSearch 中,如何过滤结果中的嵌套文档?

转载 作者:行者123 更新时间:2023-11-29 02:47:00 24 4
gpt4 key购买 nike

假设,在 ElasticSearch 5 中,我有像这样嵌套的数据:

{"number":1234, "names": [ 
{"firstName": "John", "lastName": "Smith"},
{"firstName": "Al", "lastName": "Jones"}
]},
...

我想查询编号为 1234 的匹配项,但仅返回匹配“lastName”:“Jones”的姓名,因此我的结果会忽略不匹配的姓名。换句话说,我只想取回匹配文档的一部分,基于术语查询或类似的查询。

一个简单的嵌套查询是行不通的,因为这样会过滤顶级结果。有什么想法吗?

{ "query" : { "bool": { "filter":[
{ "term": { "number":1234} },
???? something with "lastName": "Jones" ????
] } } }

我要回来:

hits: [
{"number":1234, "names": [
{"firstName": "Al", "lastName": "Jones"}
]},
...
]

最佳答案

hits 部分返回一个 _source - 这与您索引的文档完全相同。

你是对的,嵌套查询过滤顶级结果,但是使用 inner_hits 它会告诉你哪些内部嵌套对象导致返回这些顶级文档,这正是你需要的.

names 字段可以使用 _source 参数从顶级命中中排除。

{
"_source": {
"excludes": ["names"]
},
"query":{
"bool":{
"must":[
{
"term":{
"number":{
"value":"1234"
}
}
},
{
"nested":{
"path":"names",
"query":{
"term":{
"names.lastName":"Jones"
}
},
"inner_hits":{
}
}
}
]
}
}
}

因此,现在返回的顶级文档没有 names 字段,并且您还有一个名称匹配的附加 inner_hits 部分。
您应该将嵌套对象视为顶级文档的一部分。如果您真的需要将它们分开 - 考虑 parent/child relations.

关于elasticsearch - 在 ElasticSearch 中,如何过滤结果中的嵌套文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571748/

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