Elasticsearch 在字符串的两个范围字段之间查询文档

Elasticsearch querying documents between two range fields of strings

我在 Elasticsearch 中存储了一个日志文件,其中一个文档是文件的一行。消息块以特定关键字开始和结束。我想获取包含这些关键字的文档之间的所有文档。有没有办法利用 Elasticsearch 中的范围 query/range 过滤器来查询文本字段?

示例日志文件:
...
...
xyz foo“关键字 1”.....
..
....
...
xyz 栏“关键字 2”.....
..
..

我想查询“keyword1”和“keyword2”之间的所有文档,包括包含关键字本身的文档。假设有多个这样的块带有“keyword1”和“keyword2”。

此外,我正在用新字段 test_field 更新包含这些关键字的文档,其中包含这些关键字作为值。这个新字段可以用在范围过滤器中来实现上述任务吗?

Elasticsearch 字段:_source: { "log_line", "test_field" }

我假设您还有一些标识符来定义这些文档的顺序。比方说,你有一个字段 line_number.

您可以先进行两次搜索,匹配包含关键字的所有文档。然后,对于每一对这些关键字,您都有起始行号和结束行号。对于每一对,您可以搜索两个行号之间的所有文档(使用 range query)。 这不是一个纯 ES 解决方案,需要一些脚本,例如python 或任何其他语言。如果您在查询方面需要帮助,请告诉我。

但在做这样的事情之前,如果我是你,我会批判性地质疑这个要求。为什么将日志文件逐行读取到 ES 中?为什么不使用 Logstash/Filebeat 以您喜欢的模式加载数据,这样您就有了一个包含整个块的文档?让查询和分析变得如此简单:)