如何在索引中搜索两条不同的消息文本,然后只过滤掉在同一秒钟内发生的两条消息?
f、 例如。消息:“第一条消息”和消息:“第二条消息”(仅显示包含第一条消息的索引项,然后显示包含第二条消息的索引项,如果日志项发生在彼此的1秒之内)。
可接受输出:
2020-12-18t20:26:58.089z[inf]:第一条信息
2020-12-18t20:26:58.184z[错误]:第二条消息
不可接受输出:
(索引项1和索引项2之间的时间过长,大于1s)
2020-12-18t20:26:58.089z[inf]:第一条信息
2020-12-18t20:26:59.184z[错误]:第二条消息
(事件顺序错误)
2020-12-18t20:26:58.184z[错误]:第二条消息
2020-12-18t20:26:59.089z[inf]:第一条消息
如果查询生成一个结果集,其中包含在1秒内发生的所有匹配事件对,该查询会是什么样子?
1条答案
按热度按时间cotxawn71#
elasticsearch不是一个关系数据库,它首先是一个搜索引擎,其次是一个文档存储。您请求执行的操作类似于sql中的自联接。
没有简单的方法可以做到这一点,但我相信您可以通过首先使用1秒的时间间隔对整个索引运行直方图聚合来实现所需的结果,这将为您提供具有相同“1秒”时间范围的文档组,并在这些组上循环,为每个组运行单独的查询,并扫描两个文档的结果。这在java中可以很容易地完成,但是我认为仅仅使用es查询是不容易做到的。