我是elasticsearch的新手,对于匹配特定条件时的嵌套对象检索,我有几个问题。
我有一个树状结构如下:
{
"id": 4,
"sora": [
{
"pContext": {
"context": {
"sT": "D3",
"uT": "ST"
},
"entities": [
{
"name": "premium",
"bName": "premium",
"fT": "site",
"eT": "F_P",
"children": [
{
"name": "capa",
"bName": "capa",
"fT": "site",
"eT": "FFT",
"children": []
},
{
"name": "code",
"bName": "Codes",
"fT": "site",
"eT": "FFT",
"children": []
},
{
"name": "selection A",
"fT": "site",
"eT": "SELECTION_A",
"children": [
{
"name": "A1",
"fT": "site",
"eT": "ADD",
"children": []
},
{
"name": "A2",
"fT": "site",
"eT": "ADD",
"children": []
}
]
}
]
}
]
}
},
{
"pContext": {
"context": {
"sT": "D2",
"uT": "ST"
},
"entities": [
{
"name": "112",
"bName": "112",
"eT": "D_TYPE",
"children": []
}
]
}
}
]
}
我的结构可以有更多的层次。
我有许多上述文件。为了过滤我的文档,我可以使用简单查询sintax:
{
"_source": {
"excludes": [
"*.context"
]
},
"query": {
"bool": {
"must": [
{
"match": {
"sora.pContext.context.sT": "D3"
},
"match": {
"sora.pContext.entities.name": "premium"
},
"match": {
"sora.pContext.entities.fT": "site"
}
}
]
}
}
}
我想知道的是,如何获得与查询及其子对象匹配的嵌套对象。我需要匹配必须包含筛选器的对象。有可能吗?
如何在不指定路径的情况下搜索字段?
谢谢
编辑
我的Map:
{
"mappings": {
"abc": {
"properties": {
"id": {
"type": "integer"
},
"sora": {
"type": "nested",
"properties": {
"pContext": {
"type": "nested",
"properties": {
"context": {
"type": "nested",
"properties": {
"sT": {
"type": "text"
},
"uT": {
"type": "text"
}
}
},
"entities": {
"type": "nested",
"properties": {
"name": {
"type": "text"
},
"bName": {
"type": "text"
},
"fT": {
"type": "text"
},
"eT": {
"type": "text"
},
"children": {
"type": "object"
}
}
}
}
}
}
}
}
}
}
}
2条答案
按热度按时间oalqel3c1#
好吧,如果其他人也面临同样的问题,我的解决方案是将所有子级添加到与父级相同的路径/级别,但保留与父级及其子级的Map。这样,我就可以根据需要搜索和检索父对象的各个部分。
r1zk6ea12#
是的,您可以通过使用内部点击和嵌套查询来获得匹配的对象,而不是您添加到问题中的对象。
您的查询如下所示:
我已经添加了链接到internal\u hits文档,在这里您可以了解结果的样子。