我不得不将大量数据插入到弹性中,我以下面的方式完成了这一点。我需要查询这个对象,但我无法过滤“logData”数组。有人能帮助我吗?甚至可以在弹性中过滤数组吗?
"_source": {
"FileName": "fileName.log"
"logData": [
{
"LineNumber": 1,
"Data": "data1"
},
{
"LineNumber": 2,
"Data": "Data2"
},
{
"LineNumber": 3,
"Data": "Data3"
},
{
"LineNumber": 4,
"Data": "Data4"
},
{
"LineNumber": 5,
"Data": "Data5"
},
{
"LineNumber": 6,
"Data": "Data6"
}
]
}
字符串
有没有一种方法来查询,这样我就可以从这个数组中只得到几个项目?比如:
"_source": {
"FileName": "fileName.log"
"logData": [
{
"LineNumber": 1,
"Data": "data1"
},
{
"LineNumber": 2,
"Data": "Data2"
},
{
"LineNumber": 3,
"Data": "Data3"
}
]
}
型
1条答案
按热度按时间pxy2qtax1#
ES中有no dedicated数组Map类型。
也就是说,当你有一个具有共享键的对象数组时,建议你使用
nested
field type来保留各个子对象属性的连接。如果你不使用nested,对象将被扁平化,这可能会导致 * 看似 * 错误的查询结果。至于实际的查询--假设您的Map看起来像这样:
字符串
你需要过滤那些感兴趣的
logData
子文档,也许用一个terms_query
。然后,也只有这样,你才能只提取那些匹配这个查询的数组对象(lineNumber: 1 or 2 or 3
)。这种技术被称为
inner_hits
:型
查看this thread了解更多信息。