我們目前正在構建一個多語種產品目錄,在這裏我們會爲大約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」這樣的術語處理像不同分隔符這樣的邊緣案例感覺不對。特別是,我們目前僅對德語實現了這一點......大多數其他語言可能非常相似,但我不確定是否有更好的解決方案可以使配置更加開箱,而不是重寫查詢或注入規範化文本版本。