Elasticsearch 查询 DSL 过滤器(包括中间出现)

问题描述 投票:0回答:1

我在对“log_message”字段使用前缀过滤器时遇到 Elastisearch Query DSL 问题。 目标是显示“log_message”字段具有“Started”前缀的日志。但是,过滤器还包括“已开始”出现在消息中间(而不仅仅是开头)的行。 这是我的查询:

{
  "prefix": {
    "log_message": "started"
  }
}
  • 这是我的日志消息: 2023-11-20 10:49:34.445 |信息| [重新启动主] --- 14348 | o.a.c.impl.engine.AbstractCamelContext | |开始xxxxxxxxxxxx。

她是我的logstash 模式:

%{TIMESTAMP_ISO8601:时间戳} |%{SPACE}%{LOGLEVEL:log_level}%{SPACE}|%{SPACE}[%{DATA:线程}]%{SPACE}---%{SPACE}%{NUMBER: process_id}%{SPACE}|%{SPACE}%{DATA:class}%{SPACE}| |%{SPACE}%{GREEDYDATA:log_message}( | )?

我尝试重新启动 elastisearch 和logstash,但问题仍然存在

elasticsearch logstash kibana elasticsearch-dsl elasticsearch-query
1个回答
0
投票

您有多个查询选项,每个选项都有自己的优点和用例:

1.匹配短语前缀查询

此查询对于查找在指定字段开头找到给定单词的文档非常有用。

{
  "query": {
    "match_phrase_prefix": {
      "log_message": "Started"
    }
  }
}

2.通配符查询

此查询允许您使用通配符(

*
?
)来搜索模式。

{
  "query": {
    "wildcard": {
      "log_message.keyword": "*Started*"
    }
  }
}

3.查询字符串查询

此查询支持用于解析和搜索复杂文本的强大语法。

{
  "query": {
    "query_string": {
      "default_field": "log_message",
      "query": "*Started*"
    }
  }
}

选择正确的查询

  • 如果您需要更多模式灵活性,请考虑通配符查询
  • 对于术语可能出现在句子开头的分析文本字段,匹配短语前缀查询可能更合适。
  • 对于能够使用布尔逻辑和通配符的复杂搜索模式,请使用查询字符串查询

每种查询类型都有自己的优势和理想的用例,因此选择取决于您的数据的具体情况以及您需要什么样的搜索灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.