Hunspell 分词过滤器
编辑Hunspell 分词过滤器
编辑基于提供的 Hunspell 词典 提供 字典词干提取。 hunspell
过滤器需要 配置 一个或多个特定语言的 Hunspell 词典。
此过滤器使用 Lucene 的 HunspellStemFilter。
配置 Hunspell 词典
编辑Hunspell 词典存储在文件系统上的专用 hunspell
目录中并从该目录检测:<$ES_PATH_CONF>/hunspell
。每个词典都应该有自己的目录,并以其关联的语言和区域设置命名(例如,pt_BR
、en_GB
)。此词典目录应包含单个 .aff
文件和一个或多个 .dic
文件,所有这些文件都将自动加载。例如,以下目录布局将定义 en_US
词典
- config |-- hunspell | |-- en_US | | |-- en_US.dic | | |-- en_US.aff
每个词典可以使用一个设置进行配置
-
ignore_case
-
(静态,布尔值) 如果为 true,则词典匹配将不区分大小写。默认为
false
。此设置可以在
elasticsearch.yml
中使用indices.analysis.hunspell.dictionary.ignore_case
全局配置。要为特定区域设置配置此设置,请使用
indices.analysis.hunspell.dictionary.<locale>.ignore_case
设置(例如,对于en_US
(美国英语)区域设置,设置是indices.analysis.hunspell.dictionary.en_US.ignore_case
)。您还可以将一个
settings.yml
文件添加到词典目录中,其中包含这些设置。这将覆盖在elasticsearch.yml
中定义的任何其他ignore_case
设置。
示例
编辑以下分析 API 请求使用 hunspell
过滤器将 the foxes jumping quickly
词干提取为 the fox jump quick
。
请求指定了 en_US
区域设置,这意味着 <$ES_PATH_CONF>/hunspell/en_US
目录中的 .aff
和 .dic
文件将用于 Hunspell 词典。
resp = client.indices.analyze( tokenizer="standard", filter=[ { "type": "hunspell", "locale": "en_US" } ], text="the foxes jumping quickly", ) print(resp)
const response = await client.indices.analyze({ tokenizer: "standard", filter: [ { type: "hunspell", locale: "en_US", }, ], text: "the foxes jumping quickly", }); console.log(response);
GET /_analyze { "tokenizer": "standard", "filter": [ { "type": "hunspell", "locale": "en_US" } ], "text": "the foxes jumping quickly" }
过滤器生成以下标记
[ the, fox, jump, quick ]
可配置参数
编辑-
dictionary
-
(可选,字符串或字符串数组) 一个或多个
.dic
文件(例如,en_US.dic, my_custom.dic
),用于 Hunspell 词典。默认情况下,
hunspell
过滤器使用使用lang
、language
或locale
参数指定的<$ES_PATH_CONF>/hunspell/<locale>
目录中的所有.dic
文件。 -
dedup
- (可选,布尔值) 如果为
true
,则从过滤器的输出中删除重复的标记。默认为true
。 -
lang
-
(必填*,字符串)
locale
参数 的别名。如果未指定此参数,则需要
language
或locale
参数。 -
language
-
(必填*,字符串)
locale
参数 的别名。如果未指定此参数,则需要
lang
或locale
参数。
-
locale
-
(必填*,字符串) 用于指定 Hunspell 词典的
.aff
和.dic
文件的区域设置目录。请参阅 配置 Hunspell 词典。如果未指定此参数,则需要
lang
或language
参数。 -
longest_only
- (可选,布尔值) 如果为
true
,则仅将每个标记的最长词干提取版本包含在输出中。如果为false
,则包含标记的所有词干提取版本。默认为false
。
自定义并添加到分析器中
编辑要自定义 hunspell
过滤器,请复制它以创建新自定义分词过滤器的基础。您可以使用其可配置参数修改过滤器。
例如,以下 创建索引 API 请求使用自定义 hunspell
过滤器 my_en_US_dict_stemmer
来配置新的 自定义分析器。
my_en_US_dict_stemmer
过滤器使用 en_US
的 locale
,这意味着 <$ES_PATH_CONF>/hunspell/en_US
目录中的 .aff
和 .dic
文件将被使用。过滤器还包含 dedup
参数,其值为 false
,这意味着不会从过滤器的输出中删除从词典添加的重复标记。
resp = client.indices.create( index="my-index-000001", settings={ "analysis": { "analyzer": { "en": { "tokenizer": "standard", "filter": [ "my_en_US_dict_stemmer" ] } }, "filter": { "my_en_US_dict_stemmer": { "type": "hunspell", "locale": "en_US", "dedup": False } } } }, ) print(resp)
response = client.indices.create( index: 'my-index-000001', body: { settings: { analysis: { analyzer: { en: { tokenizer: 'standard', filter: [ 'my_en_US_dict_stemmer' ] } }, filter: { "my_en_US_dict_stemmer": { type: 'hunspell', locale: 'en_US', dedup: false } } } } } ) puts response
const response = await client.indices.create({ index: "my-index-000001", settings: { analysis: { analyzer: { en: { tokenizer: "standard", filter: ["my_en_US_dict_stemmer"], }, }, filter: { my_en_US_dict_stemmer: { type: "hunspell", locale: "en_US", dedup: false, }, }, }, }, }); console.log(response);
PUT /my-index-000001 { "settings": { "analysis": { "analyzer": { "en": { "tokenizer": "standard", "filter": [ "my_en_US_dict_stemmer" ] } }, "filter": { "my_en_US_dict_stemmer": { "type": "hunspell", "locale": "en_US", "dedup": false } } } } }
设置
编辑除了 ignore_case
设置 之外,您还可以使用 elasticsearch.yml
为 hunspell
过滤器配置以下全局设置
-
indices.analysis.hunspell.dictionary.lazy
- (静态,布尔值) 如果为
true
,则 Hunspell 词典的加载将延迟到使用词典时。如果为false
,则节点启动时会检查词典目录中的词典,并且会自动加载所有词典。默认为false
。