问题所在
按前缀搜索城市名称
“wie”应找到“Wien”或“Wiesbaden”
可能的解决方法
对于用例,我建议使用
edge n-gram
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html
和
ASCII folding
条款
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-asciifolding-tokenfilter.html
.
实例
wien
token position start offset end offset
w 0 0 1
wi 1 0 2
wie 2 0 3
wien 3 0 4
wiesbaden
token position start offset end offset
w 0 0 1
wi 1 0 2
wie 2 0 3
wies 3 0 4
...
wiesbaden 8 0 9
请记住,系统现在必须以不对称的方式工作。不应分析查询(使用关键字),但必须分析索引中的数据。
有两种方法可以实现这一点:
1.)添加查询分析器以使用查询
2)将查询分析器绑定到字段
"cities": {
"type": "text",
"fields": {
"autocomplete": {
"type": "text",
"analyzer": "autocomplete_analyzer", <-- index time analyzer
"search_analyzer": "autocomplete_search" <-- search time analyzer
}
}
}
为什么德国分析仪不工作
该分析器是为德语文本设计的,使用一种简单的算法来消除弯曲和形态学。
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#german-analyzer
下面是此标记器生成的典型术语的示例
Hallo hier ist der Text über Wiesbaden und Wien. Es scheint angebracht über Wände und Wandern zu sprechen.
hallo 0 0 5
text 4 19 23
wiesbad 6 29 38
wien 8 43 47
scheint 10 52 59
angebracht 11 60 70
wand 13 76 81
wandern 15 86 93
sprech
如果它适用于城市名称,这只是巧合。