使用基于算法的词干提取器编辑
你
可以使用 porter_stem 词干提取器或直接使用 kstem 分词过滤器,或使用 snowball 分词过滤器创建一个具体语言的 Snowball 词干提取器。所有基于算法的词干提取器都暴露了用来接受 语言 参数的统一接口: stemmer token filter 。
例如,假设你发现 英语 分析器使用的默认词干提取器太激进并且
你想使它不那么激进。首先应在 language analyzers 查看 英语 分析器配置文件,配置文件展示如下:
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_keywords": {
"type": "keyword_marker",
"keywords": []
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
}
},
"analyzer": {
"english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_keywords",
"english_stemmer"
]
}
}
}
}
}
keyword_marker 分词过滤器列出那些不用被词干提取的单词。这个过滤器默认情况下是一个空的列表。
english 分析器使用了两个词干提取器: possessive_english 词干提取器和 english 词干提取器。 所有格词干提取器会在任何词传递到 english_stop 、 english_keywords 和 english_stemmer 之前去除 's 。
重新审视下现在的配置,添加上以下修改,我们可以把这份配置当作新分析器的基本配置:
修改 english_stemmer ,将 english (porter_stem 分词过滤器的映射)替换为 light_english (非激进的 kstem 分词过滤器的映射)。
添加 asciifolding 分词过滤器用以移除外语的附加符号。
移除 keyword_marker 分词过滤器,因为我们不需要它。(我们会在 控制词干提取 中详细讨论它)
新定义的分析器会像下面这样:
PUT /my_index
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"light_english_stemmer": {
"type": "stemmer",
"language": "light_english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
}
},
"analyzer": {
"english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"light_english_stemmer",
"asciifolding"
]
}
}
}
}
}
将 english 词干提取器替换为非激进的 light_english 词干提取器
添加 asciifolding 分词过滤器