Elasticsearch 的多语言配置支持 30 种语言,百搭格式的产品编号和名称



我们目前正在构建一个多语言产品目录,其中我们索引了大约 30 种语言(西欧和东欧语言,没有亚洲语言(的产品名称和产品编号。

561720 - TSC 55 李 5,2 REB-加-FS 阿库-陶赫萨格

这方面的挑战是:

  • 30种不同的语言
  • 需要规范化的重音字符 如 ä->ae 和 ä->a
  • 复合词,如"Akku-tauchsäge"。应可搜索为"Akku-Tauchsäge"或"Akkutauchsäge"或"Akku Tauch Säge"等。

  • 像"561720"这样的产品编号应该是可搜索的

  • 搜索像"TSC 55 Li 5,2 REB-Plus-FS"这样的产品编号应该得到很好的支持......此类字符串可能包含"/"或","或"-"作为分隔符。应支持不带分隔符的搜索
  • 搜索方案是典型的"按键入查找"功能,允许用户输入几乎任何内容,并期望获得合理的结果。

目前,在专用索引中按语言索引所有产品目录,并使用专用语言设置进行专用映射,例如

{
"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 替换(。

在查询端,我们通常执行以下步骤:

  • 拆分查询字符串
  • 对每个查询词执行子字符串搜索(全部使用 end 组合(

该方法效果相当好,但是在"TSC 55 Li 5,2 REB-Plus-FS"等术语中处理边缘情况(如不同分隔符(感觉不对。特别是我们目前只为德语实现了这个......大多数其他语言可能非常相似,但我不确定是否有更好的解决方案可以使配置更加开箱即用,而不是重写查询或注入规范化文本版本。

不是解决方案,只是一个提示(这真的是一个庞大的话题(

这是一个棘手的话题,需要大量时间才能正确处理。 老实说,30种语言非常雄心勃勃:-(

你可能想看看这篇很棒的博客文章 https://project-a.github.io/on-site-search-design-patterns-for-e-commerce/- 它只涉及德语,但可能会给你一个初步提示。

最新更新