elasticsearch/lucene 怎么优化多语言搜索?

查看 38|回复 1
作者:yodhcn   
比如说,一个文档包含以下 3 个字段:
- title_cn # 中文标题
- title_ja # 日文标题
- title_ko # 韩文标题
需求:无论搜索哪种语言的标题中的关键字,都能搜索到该文档
解决方案一:
[写索引] 为每个字段各建立一个索引,分别设置不同的 analyzer 。
[查索引] "query" match title_cn OR "query" match title_ja OR "query" match title_ko
优点:为每种语言配置不同的语言专用的分词器,分词效果好
缺点:3 个字段分别映射到 3 个倒排索引,搜索时需要到 3 个索引上查找,效率低
解决方案二:
[写索引] 3 个字段通过 copy_to 复制到一个字段,建立一个索引,设置一个语言不敏感的 analyzer ,比如基于 ngram 算法的分词器。
[查索引] "query" match title_all
优点:搜索时只需到 1 个索引上查找,效率高
缺点:分词效果不如对应语言专用的分词器,分词效果差
解决方案三(与方案二基本相同,区别只在 analyzer ):
[写索引] 3 个字段通过 copy_to 复制到一个字段,建立一个索引,设置一个能自动检测语言的 analyzer (实现方式:先检测文本的语言,再使用对应语言专用的分词器分词)
[查索引] "query" match title_all
优点:搜索时只需到 1 个索引上查找,效率高
缺点:如果检测语言的准确率较低,会导致内部使用错误的分词器,最终影响 [写索引] [查索引] 的分词
方案一 & 方案二各有利弊;
方案三似乎解决了问题,但 [自动检测语言] 引入了新的不确定性
矛盾点:
期望不同字段用不同的分词器,并将分词后的词元写入同一个倒排索引。
但是 match 搜索操作,需要对 "query" 也进行分词,所以分词器不同的字段,虽然可以写入到一个索引,但在搜索时无法确定该用哪个分词器对 "query" 分词。
问题:大家遇到过类似的场景吗?又用的哪种方案解决的?

索引, 分词, query, 分词器

ericguo   
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-smartcn.html
您需要登录后才可以回帖 登录 | 立即注册

返回顶部