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
resp = client.indices.analyze( tokenizer="standard", filter=[ "ngram" ], text="Quick fox", ) print(resp)
response = client.indices.analyze( body: { tokenizer: 'standard', filter: [ 'ngram' ], text: 'Quick fox' } ) puts response
const response = await client.indices.analyze({ tokenizer: "standard", filter: ["ngram"], text: "Quick fox", }); console.log(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
过滤器来配置一个新的 自定义分析器。
resp = client.indices.create( index="ngram_example", settings={ "analysis": { "analyzer": { "standard_ngram": { "tokenizer": "standard", "filter": [ "ngram" ] } } } }, ) print(resp)
response = client.indices.create( index: 'ngram_example', body: { settings: { analysis: { analyzer: { standard_ngram: { tokenizer: 'standard', filter: [ 'ngram' ] } } } } } ) puts response
const response = await client.indices.create({ index: "ngram_example", settings: { analysis: { analyzer: { standard_ngram: { tokenizer: "standard", filter: ["ngram"], }, }, }, }, }); console.log(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
。
resp = client.indices.create( index="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 } } } }, ) print(resp)
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
const response = await client.indices.create({ index: "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, }, }, }, }, }); console.log(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 } } } } }