NGram Tokenizer
ngram tokenizer 遇到指定的字符(如 : 空白、标点)时分割文本,然后返回指定长度的每个单词的 N-grams。
N-grams 就像一个滑动窗口在单词上移动,是一个连续的指定长度的字符序列。 通常用于查询不使用空格或具有较长复合词(如德语)的语言。
输出示例
使用默认设置,ngram tokenizer将初始文本视为单个词元,并生成最小长度为1且最大长度为2的 N-gram:
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
}
上面的句子会生成如下的词元:
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
配置
min_gram
以 gram 为单位的最小字符长度。 默认为1。
max_gram
以 gram 为单位的最大字符长度。 默认为2。
token_chars
应包含在词元中的字符类。 Elasticsearch将分割不属于指定类的字符。 默认为[](保留所有字符)。字符类可能是以下任何一种: 单词 - 例如a,b,ï或京 数字 - 例如3或7 空格 - 例如“”或“ n” 标点符号 - 例如! 要么 ” 符号 - 例如$或√
提示:
通常,将min_gram和max_gram设为同样的值。值越小,匹配到的文档越多,但是匹配的质量越差。值越大,越能匹配到指定的文档。3 是一个不错的初始值。
配置示例
下面的例子中,我们配置 ngram tokenizer处理单词和数字,生成 tri-grams (grams 为 3
):
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
输出为:
[ Qui, uic, ick, Fox, oxe, xes ]
Last updated
Was this helpful?