You need to enable JavaScript to run this app.
云搜索服务

云搜索服务

复制全文
插件使用指导
Wildcard Type 插件使用说明
复制全文
Wildcard Type 插件使用说明

本文介绍 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

最近更新时间:2025.02.22 11:36:42
这个页面对您有帮助吗?
有用
有用
无用
无用