N-gram 分词器
编辑N-gram 分词器编辑
从一个词中生成指定长度的 n-gram。
例如,您可以使用 ngram
分词器将 fox
更改为 [ f, fo, o, ox, x ]
。
此过滤器使用 Lucene 的 NGramTokenFilter。
ngram
过滤器类似于 edge_ngram
分词器。但是,edge_ngram
仅输出从词的开头开始的 n-gram。
示例编辑
以下 分析 API 请求使用 ngram
过滤器将 Quick fox
转换为 1 个字符和 2 个字符的 n-gram
response = client.indices.analyze( body: { tokenizer: 'standard', filter: [ 'ngram' ], text: 'Quick fox' } ) puts response
GET _analyze { "tokenizer": "standard", "filter": [ "ngram" ], "text": "Quick fox" }
该过滤器生成以下词元
[ Q, Qu, u, ui, i, ic, c, ck, k, f, fo, o, ox, x ]
添加到分析器编辑
以下 创建索引 API 请求使用 ngram
过滤器来配置一个新的 自定义分析器。
response = client.indices.create( index: 'ngram_example', body: { settings: { analysis: { analyzer: { standard_ngram: { tokenizer: 'standard', filter: [ 'ngram' ] } } } } } ) puts response
PUT ngram_example { "settings": { "analysis": { "analyzer": { "standard_ngram": { "tokenizer": "standard", "filter": [ "ngram" ] } } } } }
可配置参数编辑
-
max_gram
- (可选,整数) gram 中字符的最大长度。默认为
2
。 -
min_gram
- (可选,整数) gram 中字符的最小长度。默认为
1
。 -
preserve_original
- (可选,布尔值) 当设置为
true
时,会发出原始词元。默认为false
。
您可以使用 index.max_ngram_diff
索引级设置来控制 max_gram
和 min_gram
值之间的最大允许差值。
自定义编辑
要自定义 ngram
过滤器,请复制它以创建新自定义分词器的基础。您可以使用其可配置参数修改过滤器。
例如,以下请求创建一个自定义 ngram
过滤器,它形成 3-5 个字符之间的 n-gram。该请求还将 index.max_ngram_diff
设置增加到 2
。
response = client.indices.create( index: 'ngram_custom_example', body: { settings: { index: { max_ngram_diff: 2 }, analysis: { analyzer: { default: { tokenizer: 'whitespace', filter: [ '3_5_grams' ] } }, filter: { "3_5_grams": { type: 'ngram', min_gram: 3, max_gram: 5 } } } } } ) puts response
PUT ngram_custom_example { "settings": { "index": { "max_ngram_diff": 2 }, "analysis": { "analyzer": { "default": { "tokenizer": "whitespace", "filter": [ "3_5_grams" ] } }, "filter": { "3_5_grams": { "type": "ngram", "min_gram": 3, "max_gram": 5 } } } } }