Elasticsearch:对嵌套文档执行"inner_hit"时,返回层次结构中匹配偏移量的所有字段



文档映射:

{
"mappings": {
"properties": {
"client_classes": {
"type": "nested",
"properties": {
"members": {
"type": "nested",
"properties": {
"phone_nos": {
"type": "nested"
}
}
}
}
}
}
}
}

文档中的数据:

{
"client_name":"client1",
"client_classes":[
{
"class_name":"class1",
"members":[
{
"name":"name1",
"phone_nos":[
{
"ext":"91",
"number":"99119XXXX"
},
{
"ext":"04",
"number":"99885XXXX"
}
]
},
{
"name":"name2",
"phone_nos":[
{
"ext":"03",
"number":"99887XXXX"
}
]
}
]
}
]
}

我查询值为"99119XXXX"的"数字">

{
"query":{
"nested":{
"path":"client_classes.members.phone_nos",
"query":{
"match":{
"client_classes.members.phone_nos.number":"99119XXXX"
}
},
"inner_hits":{}
}
}
}

内部命中的结果:

"inner_hits":{
"client_classes.members.phone_nos":{
"hits":{
"total":{
"value":1,
"relation":"eq"
},
"max_score":0.9808291,
"hits":[
{
"_index":"clients",
"_type":"_doc",
"_id":"1",
"_nested":{
"field":"client_classes",
"offset":0,
"_nested":{
"field":"members",
"offset":0,
"_nested":{
"field":"phone_nos",
"offset":0
}
}
},
"_score":0.9808291,
"_source":{
"ext":"91",
"number":"99119XXXX"
}
}
]
}
}
}

我在内部命中获得了所有嵌套对象的所需匹配结果层次结构,但我只收到这些对象的"偏移"值和"字段"。我需要相应偏移量的完整对象。

像这样:

{
"client_name":"client1",
"client_classes":[
{
"class_name":"class1",
"members":[
{
"name":"name1",
"phone_nos":[
{
"ext":"91",
"number":"99119XXXX"
}
]
}
]
}
]
}

我知道有了inner_hit我还获得了完整的根文档,从中我可以使用 innerhit 对象的偏移值。但是获取整个根文档对于我们的内存来说可能很昂贵,所以我只需要我上面分享的结果。 到目前为止,还有这种可能性吗?

我正在使用 elasticsearch 7.7

更新:在文档中添加了映射,结果和轻微修复

是的,只需在顶层添加"_source": false,您只会获得嵌套的内部点击

{
"_source": false,                 <--- add this
"query":{
"nested":{
"path":"client_classes.members.phone_nos",
"query":{
"match":{
"client_classes.members.phone_nos.number":"99119XXXX"
}
},
"inner_hits":{}
}
}
}

最新更新