橡皮、老虎皮、狮子皮哪一个最不好?

中文数字 与 阿拉伯数字的搜索问题

Elasticsearch | 作者 chanfy | 发布于2018年09月20日 | 阅读数:2521

docment为:
xxxxx成都三日游xxxxx  
或者 
xxxx成都三天四晚套餐xxxxx
 
但搜索的时候输入:成都3日   或者 成都3天4晚     不能精确匹配到上面的结果
 
尝试过配置同义词:
三, 3
四, 4
.....
 
但由于分析的时候用的:ik_max_word
查询的时候为了提高精度,用的ik_smart,输入成都3日 会被分词成:成都 和 3日   同义词就匹配不上了
 
也想过将输入的词直接用java代码 将阿拉伯数字统一换成中文数字,但感觉麻烦且不优雅
 
有大神支招吗?万分感谢!
已邀请:

rochy - rochy_he

赞同来自: chanfy

优雅的方式就是在分词里面添加一个过滤器(TokenFilter),过滤器负责将中文的数字转换为阿拉伯数字;
这样无论输入是中文或者英文最后都是都会被解析为阿拉伯数字,就可以满足你的搜索要求了。
 
不过搜索了一下没有找到现成的数字过滤器,所以目前最佳的方案还是自己用 java 代码自己转换一下;或者你自己开发一个插件。

liujia

赞同来自:

用一样的分词器.或者, 索引的时候用ik_smart, 搜索的时候用ik_max_word.
否则你说的"为了提高精度", 我觉得不太对, 反过来了吧.

要回复问题请先登录注册