当前位置: 首页 > 知识库问答 >
问题:

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

舒浩邈
2023-03-14

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

示例日志文件:




。。

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

此外,我正在用一个新的field test_字段更新包含这些关键字的文档,该字段将这些关键字作为值。这个新字段可以用于范围滤波器以实现上述任务吗?

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

共有1个答案

弘伟彦
2023-03-14

我假设您还有一些标识符来定义这些文档的顺序。比如说,您有一个字段行号。

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

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

 类似资料:
  • 我只是在玩一些代码,我似乎不明白我哪里出错了。 我有一个“数字”字段,存储01-20之间的数字,后跟一个字母。我已经创建了一个局部变量,将前2个数字存储为字符串,但如果范围在01-20之间,我似乎无法使范围返回真。注意00不是有效的数字。 有什么想法吗?

  • 问题内容: 我存储的文档包含两个字段,即startDate和endDate。我想使用输入日期运行Elastic查询,并返回其startDate和endDate包含该日期的所有文档。例如, 如果我输入的日期为2015-01-02,则此文档应出现在结果中,因为输入的日期在开始日期和结束日期字段的范围内。 我可以使用一个字段进行范围查询,但由于范围仅接受一个,因此我不知道如何使用两个日期字段: 我还需要

  • 问题内容: 我正在尝试将范围查询与elasticsearch一起使用 但是弹性返回没有结果。我发现系统存在字符串包含或问题 这是该字段的映射: 问题答案:

  • 我只是好奇为什么Lucene不以标准的方式区分字符串和数值。。例如,范围查询的和,并在默认情况下将它们全部视为字符串。 是否有任何特殊原因将这两种情况都视为字符串值?

  • 问题内容: 如何找到两个子字符串之间的字符串? 我当前的方法是这样的: 但是,这似乎效率很低而且不合Python。什么是做这样的更好的方法? 忘了提:该字符串可能无法启动,并最终和。他们之前和之后的字符可能更多。 问题答案:

  • 问题内容: 我正在尝试 使用循环从两个不同的用户输入中打印常用字母。(我需要使用for循环来完成它。)我遇到了两个问题:1.我的语句“ If char not in output …”没有提取唯一值。2.输出为我提供了单个字母列表,而不是单个字符串。我尝试分割输出,但是分割遇到类型错误。 问题答案: 您正在尝试执行“设置相交”。Python有 相同的方法。您可以将其用于您的用例,例如: 将返回字符