ElasticSearch Kibana的分词查询逻辑
内容目录

以下内容经ai修饰,做记录用。

分词查询与短语查询

在 Kibana 的 Discover 中查询一个 text 字段时,可以通过 Kibana Query Language (KQL) 或 Elasticsearch Query DSL 来进行分词查询和短语查询。

1. 分词查询

分词查询是指将查询条件分词后,与 text 字段中的分词结果进行匹配。

使用 KQL:

在 KQL 中,分词查询是默认行为。你只需要简单地输入查询词。

text_field: your_query

例如,如果 your_queryhello world,KQL 会将它分词为 helloworld,并分别与 text_field 的分词结果进行匹配。

使用 Elasticsearch Query DSL:

在 Query DSL 中,可以使用 match 查询来实现分词匹配:

{
  "query": {
    "match": {
      "text_field": "your_query"
    }
  }
}

这个查询会对 text_field 的内容和 your_query 都进行分词,并匹配分词后的结果。


2. 短语查询

短语查询是指查询字符串作为一个整体进行匹配,不进行分词或仅部分分词。

使用 KQL:

在 KQL 中,可以通过双引号将短语括起来来实现短语查询:

text_field: "your phrase query"

例如:

text_field: "hello world"

这个查询会匹配字段中包含 hello world 作为短语的内容。

使用 Elasticsearch Query DSL:

在 Query DSL 中,可以使用 match_phrase 查询来实现短语查询:

{
  "query": {
    "match_phrase": {
      "text_field": "your phrase query"
    }
  }
}

这个查询要求 text_field 中的内容与 your phrase query 完全匹配(顺序和位置一致)。


总结

  • 分词查询
    • KQL: text_field: your_query
    • DSL: 使用 match 查询
  • 短语查询
    • KQL: text_field: "your phrase query"
    • DSL: 使用 match_phrase 查询

在 Kibana 的 Discover 中,直接使用 KQL 是最方便的。如果需要更复杂的查询,可以在高级查询中使用 Query DSL。

分词查询中的 斜杠 / 的作用

在 Kibana Query Language (KQL) 中,斜杠 / 用于 正则表达式查询。如果你在查询中使用斜杠包裹内容(例如 /pattern/),KQL 会将其解释为正则表达式,并尝试匹配符合该正则表达式的字段值。

示例用法

1. 匹配分词后的结果

如果一个字段是 text 类型,且内容会被分词,可以通过正则表达式匹配特定的分词结果。例如:

text_field: /hel.*/
  • 匹配 text_field 中任何分词结果以 hel 开头的单词,例如 hello, helper, helium

2. 匹配不分词的结果

如果字段是 keyword 类型,使用正则表达式可以匹配整个字段的值。例如:

keyword_field: /.*example.*/
  • 匹配 keyword_field 中包含 example 的任何字符串。

注意事项

  • 分词字段的正则匹配

    • KQL 对 text 类型字段的正则匹配基于分词后的单词,而不是整个字段内容。例如,如果字段内容是 Hello world!,分词结果是 ["hello", "world"],那么 /wor.*/ 会匹配,因为 world 符合条件。
  • 性能问题

    • 正则表达式查询可能会导致性能下降,尤其是在数据量大的情况下,因此应谨慎使用。
  • 大小写敏感性

    • KQL 的正则表达式匹配默认不区分大小写。如果需要区分大小写,可以在 Kibana 中配置查询选项或对数据进行预处理。

结合分词查询的逻辑

斜杠 / 的作用是在分词查询的基础上引入正则匹配功能,从而提供更灵活的匹配方式。例如,如果想匹配某字段的内容中包含某个特定模式的单词,可以使用:

text_field: /specific.*/

与普通分词查询的区别在于,正则表达式允许你更加动态地定义匹配规则,而不仅限于固定的词或短语。

上一篇