N-gram 分词器
编辑N-gram 分词器
编辑ngram
分词器首先根据指定字符列表将文本分解成单词,然后发出指定长度的每个单词的 N-gram。
N-gram 就像一个滑动窗口,它在单词上移动 - 指定长度的连续字符序列。它们对于查询不使用空格或具有长复合词(如德语)的语言很有用。
示例输出
编辑使用默认设置,ngram
分词器将初始文本视为单个标记,并生成最小长度为 1
且最大长度为 2
的 N-gram。
resp = client.indices.analyze( tokenizer="ngram", text="Quick Fox", ) print(resp)
response = client.indices.analyze( body: { tokenizer: 'ngram', text: 'Quick Fox' } ) puts response
const response = await client.indices.analyze({ tokenizer: "ngram", text: "Quick Fox", }); console.log(response);
POST _analyze { "tokenizer": "ngram", "text": "Quick Fox" }
以上句子将产生以下词语:
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
配置
编辑ngram
分词器接受以下参数:
|
gram 中字符的最小长度。默认为 |
|
gram 中字符的最大长度。默认为 |
|
应包含在标记中的字符类。Elasticsearch 将在不属于指定类的字符处进行分割。默认为 字符类可以是以下任何一种:
|
|
应视为标记一部分的自定义字符。例如,将其设置为 |
通常将 min_gram
和 max_gram
设置为相同的值是有意义的。长度越小,匹配的文档越多,但匹配的质量越低。长度越长,匹配越具体。三元组(长度 3
)是一个不错的起点。
索引级别设置 index.max_ngram_diff
控制 max_gram
和 min_gram
之间允许的最大差异。
示例配置
编辑在此示例中,我们配置 ngram
分词器将字母和数字视为标记,并生成三元组(长度为 3
的 gram)。
resp = client.indices.create( index="my-index-000001", settings={ "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "ngram", "min_gram": 3, "max_gram": 3, "token_chars": [ "letter", "digit" ] } } } }, ) print(resp) resp1 = client.indices.analyze( index="my-index-000001", analyzer="my_analyzer", text="2 Quick Foxes.", ) print(resp1)
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { my_analyzer: { tokenizer: 'my_tokenizer' } }, tokenizer: { my_tokenizer: { type: 'ngram', min_gram: 3, max_gram: 3, token_chars: [ 'letter', 'digit' ] } } } } } ) puts response response = client.indices.analyze( index: 'my-index-000001', body: { analyzer: 'my_analyzer', text: '2 Quick Foxes.' } ) puts response
const response = await client.indices.create({ index: "my-index-000001", settings: { analysis: { analyzer: { my_analyzer: { tokenizer: "my_tokenizer", }, }, tokenizer: { my_tokenizer: { type: "ngram", min_gram: 3, max_gram: 3, token_chars: ["letter", "digit"], }, }, }, }, }); console.log(response); const response1 = await client.indices.analyze({ index: "my-index-000001", analyzer: "my_analyzer", text: "2 Quick Foxes.", }); console.log(response1);
PUT my-index-000001 { "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-000001/_analyze { "analyzer": "my_analyzer", "text": "2 Quick Foxes." }
以上示例产生以下词语:
[ Qui, uic, ick, Fox, oxe, xes ]