边缘 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
}
]
}