考虑以下映射作为示例:
PUT /test
{
"settings": {
"analysis": {
"filter": {
"my_hunspell": {
"type": "hunspell",
"language": "en_GB"
}
},
"analyzer": {
"my_test": {
"type" : "custom",
"tokenizer": "lowercase",
"filter": ["my_hunspell"]
}
}
}
}
}
我已经从Mozilla官方页面下载了hunspell词典。
现在的问题是,有些词,例如啤酒被过度分析。以下查询将啤酒转化为蜜蜂,这不完全正确吗?
POST /test/_analyze?analyzer=my_test&text=beer
{
"tokens": [
{
"token": "bee",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 1
}
]
}
Hunspell语法很难理解。如何避免这种行为?是否可以保留一些单词或添加一些规则?
最佳答案
如果您可以提出一些要保留的单词列表,那么Keyword Marker Token Filter可能值得研究。看来这样可以防止您想保护的单词被阻止。更新后的分析器可能类似于:
{
"settings": {
"analysis": {
"filter": {
"my_hunspell": {
"type": "hunspell",
"language": "en_GB"
},
"protect_my_words": {
"type": "keyword_marker",
"keywords_path": <PATH TO TEXT FILE WITH THE WORDS>
}
},
"analyzer": {
"my_test": {
"type" : "custom",
"tokenizer": "lowercase",
"filter": ["protect_my_words", "my_hunspell"]
}
}
}
}
}
如果您确实想转换特定的单词或样式,还有Pattern Replace Token Filter可能会有用。这可以在关键字标记标记过滤器之前。
关于elasticsearch - Elasticsearch hunspell过多地削减了单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994137/