JHI*_*EDE 5 subquery elasticsearch elasticsearch-dsl
我有一个嵌套的数据类型,我想在它们的内部对象中进行计算,如果它们满足两个内部对象中的条件,我基本上希望我的搜索返回命中,棘手的条件是检索它们各自的时间戳值作为查询并使用它们来生成命中给定它们之间所需的时间差。
以这个单一文件为例:
{
"messages": [
[
{
"message": "First message",
"timeStamp": "0:00:00"
},
{
"message": "Second message",
"timeStamp": "0:10:00"
},
{
"message": "Third message",
"timeStamp": "0:15:00"
},
{
"message": "Fourth message",
"timeStamp": "0:30:00"
},
{
"message": "Fifth message",
"timeStamp": "1:00:00"
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
如果消息包含文本Second并且在彼此Third相隔5 分钟内找到不同内部对象上的文本,我希望返回我的命中。如果我将它们的时间戳直接添加为查询的一部分,我可以轻松实现此查询,但此查询必须针对不同的时间戳数据运行。
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"nested": {
"path": "messages",
"query": {
"bool": {
"must": [
{
"match": {
"messages.message": "Second"
}
},
{
"match": {
"messages.timeStamp": "0:10:00" <-- Start timeStamp depends on my data, consider this as a variable X to be used below
}
}
]
}
}
}
},
{
"nested": {
"path": "messages",
"query": {
"bool": {
"must": [
{
"match": {
"messages.message": "Third"
}
},
{
"range": {
"messages.timeStamp": {
"gte": "0:10:00", <-- Variable X mentioned above
"lte": "0:15:00" <-- I can't know end timeStamp, can only know it's a 5 minute range
}
}
}
]
}
}
}
}
]
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我研究过将结果用作子查询的一部分,以前版本下的旧响应说这是不可能的,并且无法使用 script_fields 或 inner_hits 实现它。我还查看了距离特征查询,但看起来我仍然需要将原点指定为查询的一部分,而且我不相信这能真正解决我的需求。
有谁知道是否有可行的方法来实现这一目标?谢谢!
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |