N-gram 分词器
ngram
分词器将文本分割成指定长度的重叠 N-gram(字符序列)。当您想要执行部分单词匹配或自动完成搜索功能时,此分词器特别有用,因为它会生成原始输入文本的子字符串(字符 N-gram)。
使用示例
以下示例请求创建了一个名为 my_index
的新索引,并配置了一个带有 ngram
分词器的分析器。
PUT /my_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 4,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"my_ngram_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer"
}
}
}
}
}
生成的词元
使用以下请求检查使用该分析器生成的词元
POST /my_index/_analyze
{
"analyzer": "my_ngram_analyzer",
"text": "OpenSearch"
}
响应包含生成的词元
{
"tokens": [
{"token": "Sea","start_offset": 0,"end_offset": 3,"type": "word","position": 0},
{"token": "Sear","start_offset": 0,"end_offset": 4,"type": "word","position": 1},
{"token": "ear","start_offset": 1,"end_offset": 4,"type": "word","position": 2},
{"token": "earc","start_offset": 1,"end_offset": 5,"type": "word","position": 3},
{"token": "arc","start_offset": 2,"end_offset": 5,"type": "word","position": 4},
{"token": "arch","start_offset": 2,"end_offset": 6,"type": "word","position": 5},
{"token": "rch","start_offset": 3,"end_offset": 6,"type": "word","position": 6}
]
}
参数
ngram
分词器可以使用以下参数进行配置。
参数 | 必需/可选 | 数据类型 | 描述 |
---|---|---|---|
min_gram | 可选 | 整数 | N-gram 的最小长度。默认为 1 。 |
max_gram | 可选 | 整数 | N-gram 的最大长度。默认为 2 。 |
token_chars | 可选 | 字符串列表 | 要包含在分词中的字符类别。有效值包括: - letter (字母)- digit (数字)- whitespace (空格)- punctuation (标点符号)- symbol (符号)- custom (您还必须指定 custom_token_chars 参数)默认为空列表 ( [] ),表示保留所有字符。 |
custom_token_chars | 可选 | 字符串 | 要包含在词元中的自定义字符。 |
min_gram
和 max_gram
之间的最大差值
min_gram
和 max_gram
之间的最大差值通过索引级别设置 index.max_ngram_diff
配置,默认为 1
。
以下示例请求创建了一个带有自定义 index.max_ngram_diff
设置的索引。
PUT /my-index
{
"settings": {
"index.max_ngram_diff": 2,
"analysis": {
"tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 5,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"my_ngram_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer"
}
}
}
}
}