字典分解词元过滤器
编辑字典分解词元过滤器
编辑在大多数情况下,我们建议使用更快的 hyphenation_decompounder
词元过滤器来代替此过滤器。但是,您可以使用 dictionary_decompounder
过滤器检查词表质量,然后再将其应用于 hyphenation_decompounder
过滤器。
使用指定的词表和蛮力方法在复合词中查找子词。如果找到,这些子词将包含在词元输出中。
此过滤器使用 Lucene 的 DictionaryCompoundWordTokenFilter,该过滤器是为日耳曼语构建的。
示例
编辑以下 分析 API 请求使用 dictionary_decompounder
过滤器在 Donaudampfschiff
中查找子词。然后,过滤器会根据指定的词表检查这些子词:Donau
、dampf
、meer
和 schiff
。
resp = client.indices.analyze( tokenizer="standard", filter=[ { "type": "dictionary_decompounder", "word_list": [ "Donau", "dampf", "meer", "schiff" ] } ], text="Donaudampfschiff", ) print(resp)
response = client.indices.analyze( body: { tokenizer: 'standard', filter: [ { type: 'dictionary_decompounder', word_list: [ 'Donau', 'dampf', 'meer', 'schiff' ] } ], text: 'Donaudampfschiff' } ) puts response
const response = await client.indices.analyze({ tokenizer: "standard", filter: [ { type: "dictionary_decompounder", word_list: ["Donau", "dampf", "meer", "schiff"], }, ], text: "Donaudampfschiff", }); console.log(response);
GET _analyze { "tokenizer": "standard", "filter": [ { "type": "dictionary_decompounder", "word_list": ["Donau", "dampf", "meer", "schiff"] } ], "text": "Donaudampfschiff" }
过滤器生成以下词元
[ Donaudampfschiff, Donau, dampf, schiff ]
可配置参数
编辑-
word_list
-
(必填*,字符串数组) 要在词元流中查找的子词列表。如果找到,则子词将包含在词元输出中。
必须指定此参数或
word_list_path
。 -
word_list_path
-
(必填*,字符串) 包含要在词元流中查找的子词列表的文件的路径。如果找到,则子词将包含在词元输出中。
此路径必须是绝对路径或相对于
config
位置的相对路径,并且文件必须使用 UTF-8 编码。文件中每个词元都必须用换行符分隔。必须指定此参数或
word_list
。 -
max_subword_size
- (可选,整数) 最大子词字符长度。更长的子词词元将从输出中排除。默认为
15
。 -
min_subword_size
- (可选,整数) 最小子词字符长度。更短的子词词元将从输出中排除。默认为
2
。 -
min_word_size
- (可选,整数) 最小词字符长度。更短的词词元将从输出中排除。默认为
5
。 -
only_longest_match
- (可选,布尔值) 如果为
true
,则仅包含最长的匹配子词。默认为false
。
自定义和添加到分析器
编辑要自定义 dictionary_decompounder
过滤器,请将其复制以创建新自定义词元过滤器的基础。您可以使用其可配置参数修改过滤器。
例如,以下 创建索引 API 请求使用自定义 dictionary_decompounder
过滤器来配置新的 自定义分析器。
自定义 dictionary_decompounder
过滤器在 analysis/example_word_list.txt
文件中查找子词。长度超过 22 个字符的子词将从词元输出中排除。
resp = client.indices.create( index="dictionary_decompound_example", settings={ "analysis": { "analyzer": { "standard_dictionary_decompound": { "tokenizer": "standard", "filter": [ "22_char_dictionary_decompound" ] } }, "filter": { "22_char_dictionary_decompound": { "type": "dictionary_decompounder", "word_list_path": "analysis/example_word_list.txt", "max_subword_size": 22 } } } }, ) print(resp)
const response = await client.indices.create({ index: "dictionary_decompound_example", settings: { analysis: { analyzer: { standard_dictionary_decompound: { tokenizer: "standard", filter: ["22_char_dictionary_decompound"], }, }, filter: { "22_char_dictionary_decompound": { type: "dictionary_decompounder", word_list_path: "analysis/example_word_list.txt", max_subword_size: 22, }, }, }, }, }); console.log(response);
PUT dictionary_decompound_example { "settings": { "analysis": { "analyzer": { "standard_dictionary_decompound": { "tokenizer": "standard", "filter": [ "22_char_dictionary_decompound" ] } }, "filter": { "22_char_dictionary_decompound": { "type": "dictionary_decompounder", "word_list_path": "analysis/example_word_list.txt", "max_subword_size": 22 } } } } }