Link Search Menu Expand Document Documentation Menu

边缘 n-gram 词元过滤器

edge_ngram 词元过滤器与 ngram 词元过滤器非常相似,它们都将特定字符串拆分成不同长度的子字符串。然而,edge_ngram 词元过滤器只从词元(边缘)的开头生成 n-gram(子字符串)。它在自动完成或前缀匹配等场景中特别有用,您可以在用户输入时匹配单词或短语的开头。

参数

edge_ngram 词元过滤器可以使用以下参数进行配置。

参数 必需/可选 数据类型 描述
min_gram 可选 整数 将生成的 n-gram 的最小长度。默认值为 1
max_gram 可选 整数 将生成的 n-gram 的最大长度。对于 edge_ngram 过滤器,默认值为 1;对于自定义词元过滤器,默认值为 2。避免将此参数设置为过低的值。如果值设置得太低,将只生成非常短的 n-gram,并且无法找到搜索词。例如,如果将 max_gram 设置为 3 并且您索引单词“banana”,则生成的词元最长将是“ban”。如果用户搜索“banana”,将不会返回任何匹配项。您可以使用 truncate 词元过滤器作为搜索分析器来降低此风险。
preserve_original 可选 布尔型 在输出中包含原始词元。默认值为 false

示例

以下示例请求创建一个名为 edge_ngram_example 的新索引,并使用 edge_ngram 过滤器配置一个分析器

PUT /edge_ngram_example
{
  "settings": {
    "analysis": {
      "filter": {
        "my_edge_ngram": {
          "type": "edge_ngram",
          "min_gram": 3,
          "max_gram": 4
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "my_edge_ngram"]
        }
      }
    }
  }
}

生成的词元

使用以下请求检查使用该分析器生成的词元

POST /edge_ngram_example/_analyze
{
  "analyzer": "my_analyzer",
  "text": "slow green turtle"
}

响应包含生成的词元

{
  "tokens": [
    {
      "token": "slo",
      "start_offset": 0,
      "end_offset": 4,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "slow",
      "start_offset": 0,
      "end_offset": 4,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "gre",
      "start_offset": 5,
      "end_offset": 10,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "gree",
      "start_offset": 5,
      "end_offset": 10,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "tur",
      "start_offset": 11,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "turt",
      "start_offset": 11,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}
剩余 350 字符

有问题?

想贡献?