You need to enable JavaScript to run this app.
导航
Wildcard Type 插件使用说明
最近更新时间:2025.02.22 11:36:42首次发布时间:2025.02.22 11:36:42
我的收藏
有用
有用
无用
无用

本文介绍 Wildcard Type 的基本使用方法。

概述

Wildcard 类型作为 Keyword 类型的变体,主要用于提高原本应用在 Keyword 字段上的 regex/wildcard 查询性能。在索引阶段,Keyword 字段的数据会作为一个整体被索引,而 Wildcard 则会以 ngram 的方式进行索引(默认 N 为 3)。即 ABCD 将会以 ABC 和 BCD 被索引(目前的实现也会有长度为 1/2 的子串被索引),处理查询时也会采用类似的方法,如 test 查询将被作为 tes AND est 被查询,先进行初步的筛选,再进行最终的匹配。

说明

在 Wildcard 类型上进行完全匹配的查询(term/terms)性能将会弱于 Keyword 类型,您需要根据实际的查询方式来决定是否要使用 Wildcard Type。

适用版本

该功能在 ES 7.10.2 和 OpenSearch 2.9 版本上默认支持。

适用场景

  • 文档数量很大(如几十万、上百万甚至更多),并且字段值各不相同(cardinality 较大)AND 会用到 * 开头的查询。
  • 字段长度很大(如数千字节以上) AND 会在其上进行通配符或者正则查询。
  • 开启 doc value 后,能够进一步提升 wildcard 查询的性能,但相应的存储空间也会变大。

使用影响

相比于使用 Keyword,空间占用会变大。

使用方法

  1. 创建包含 Wildcard 字段类型的索引。

    PUT logs
    {
      "mappings" : {
        "properties" : {
          "log_line" : {
            "type" :  "wildcard"
          }
        }
      }
    }
    
  2. 在 Wildcard 字段上进行 Wildcard 类型查询。

    GET logs/_search
    {
      "query": {
        "wildcard": {
          "log_line": {
            "value": "k*y*fi*",
            "case_insensitive":"true",
            "boost":"2"
          }
        }
      }
    }
    

    其中:

    • case_insensitive:可选,表示匹配时,是否大小写敏感,默认敏感。
    • boost:可选,修改查询得分权重。
    • value 支持 2 种特殊通配符:
      • *:代表长度大于 0 的任何字符串。
      • ?:代表长度为 1 的任何字符。

    关于 Wildcard 的更多信息,可参考 Wildcard field typeWildcard query