You need to enable JavaScript to run this app.
导航

使用 NGram-Type 插件模糊查询

最近更新时间2024.01.08 19:05:12

首次发布时间2024.01.08 19:05:12

opendistro-ngram-type 是云搜索服务的一个系统内置插件。在模糊搜索的场景中,推荐使用 Ngram 通配符查询,可以在字符串的任意位置查询到匹配项。本文介绍 NGram-Type 插件的简单使用方式。

前提条件

opendistro-ngram-type 插件默认未安装,如果需要使用,请提前自行安装。如何安装,请参见安装系统内置插件

步骤一:设置 mappings

PUT my-index
{
  "mappings": {
    "properties": {
      "my_doc": {
        "type": "ngram",
        "ignore_above":300,
        "null_value": "value1"
      }
    }
  }
}
  • Type:必填,设置字段类型为 ngram
  • ignore_above:可选,字段的最大字符长度,超过该长度的字段将不会索引。示例值 300,表示字段长度超过 300 后就不进行建立索引。
  • null_value: 可选,当字段值为空时,不能被索引和查询。示例值 value1,表示当字段值为 null,,构建索引时将使用 value1。

步骤二:写入文档

PUT my-index/_doc/1
{
  "my_doc" : "This string can be quite lengthy"
}

步骤三:查询文档

GET my-index/_search
{
  "query": {
    "wildcard": {
      "my_doc": {
        "value": "*quite*lengthy",
        "case_insensitive":"true",
        "boost":"1"
      }
    }
  }
}
  • 使用 NGram-Type 插件时,目前仅支持使用 wildcard 查询算子
  • value: 必选,模糊搜索内容。

    说明

    设置模糊搜索内容时,支持 2 种特殊通配符

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

查询成功时,返回如下类似信息:

{
  "took" : 180,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 9.0,
    "hits" : [
      {
        "_index" : "my-index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 9.0,
        "_source" : {
          "my_doc" : "This string can be quite lengthy"
        }
      }
    ]
  }
}