我们目前正在构建一个多语种产品目录,在这里我们会为大约30种语言(西部和东部地区)编制产品名称和产品编号,欧洲语言,没有亚洲语言)。针对30种语言的Elasticsearch的多语言配置,通配格式的产品编号和名称
561720 - TSC 55李5,2 REB-PLUS-FS AKKU-Tauchsäge
的这里的挑战是:
- 30种不同的语言
- 有需要正常化重音符号 像ä-> ae和ä-> a
复合词像“Akku-tauchsäge”..应该是可搜索的作为 “AKKU-Tauchsäge” 或 “Akkutauchsäge” 或 “AKKU Tauch圣人” 等
产品编号,如 “561720” 应该是搜索
- 一种产品编号搜索像“TSC 55李5,2 REB -Plus-FS“应该得到很好的支持...这样的字符串可以包含'/'或','或' - '作为分隔符。搜索不带分隔符应该被支持
- 搜索场景是一个典型的find-即用型功能,用户可以输入几乎任何东西以期望获得合理的结果。
在索引时的所有产品目录由语言与专用语言设置专用映射专用指标像
{
"properties": {
"label": {
"index": "analyzed",
"type": "string",
"store": "yes",
"analyzer": "##LANGUAGE##"
},
"caption": {
"index": "analyzed",
"type": "string",
"store": "yes",
"analyzer": "##LANGUAGE##"
},
"text_normalized": {
"index": "analyzed",
"type": "string",
"analyzer": "##LANGUAGE##"
}
}
}
##LANGUAGE##
与相关ES分析仪的名称在导入过程中被替换。
除了原始文本,我们还注入了带有口音规范化的文本的规范化版本(例如,德语分析器确实正确地处理了ä-> ae替换)。
在查询侧我们一般来说有以下步骤执行:
- 分割查询字符串
- 执行针对每一个查询词语的子字符串搜索(所有使用端组合)
的方法工作得很好,但像“TSC 55 Li 5,2 REB-Plus-FS”这样的术语处理像不同分隔符这样的边缘案例感觉不对。特别是,我们目前仅对德语实现了这一点......大多数其他语言可能非常相似,但我不确定是否有更好的解决方案可以使配置更加开箱,而不是重写查询或注入规范化文本版本。