如何解决根据字段值匹配、序列和有限时间范围生成 Elasticsearch 查询输出
如何在索引中搜索两条不同的消息文本,然后只过滤掉同一秒内发生的两条消息?
例如消息:“第一条消息”和消息:“第二条消息” (仅显示包含第一条消息的索引条目,然后是包含第二条消息的条目,如果日志条目发生在彼此之间 1 秒内)。
可接受的输出:
2020-12-18T20:26:58.089Z [INF]:第一条消息
2020-12-18T20:26:58.184Z [错误]:第二条消息
不可接受的输出:
(索引条目 1 和索引条目 2 之间的时间超过 1 秒)
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 秒内发生的所有匹配事件对?
解决方法
Elasticsearch 不是关系型数据库,它首先是一个搜索引擎,其次才是一个文档存储。您要求执行的操作类似于 SQL 中的自联接。
没有简单的方法可以做到这一点,但我相信您可以通过首先使用 1 秒间隔在整个索引上运行直方图聚合来实现您想要的结果,这将为您提供具有相同“1-第二个“时间范围,并遍历组,为每个组运行单独的查询并扫描您的 2 个文档的结果。这可以在 Java 中相当容易地完成,但我认为您无法仅通过 ES 查询轻松完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。