@
sdot96 #3 首先感谢回复哈
case1 主要问题是一些错字导致搜不到,比如“故宫”,用户输入了“股宫”,这样就搜不到了
我们最终的解决方案:
1 、由于我们业务场景,搜索的都是名字,并不是搜索描述文本,所以我们最终并没有使用 ik 之类的分词器进行分词,我们录入数据的时候,将名字直接拆成各种文字组合,比如“烟台国际饭店”,我们会录入“烟、烟台、烟台国、烟台国际、烟台国际饭、烟台国际饭店、台、台国、台国际、台国际饭...”,同时在这一步把所有中文也转成拼音和拼音缩写存进去。最终程序拆好词以后各个词空格隔开,存进 es ,es 里面使用空格分词
2 、基于第一步拆出来的字段,这个字段交给运营去维护,比如运营觉得搜索“顾宫”应该出现“故宫”,那么他只需要把“顾宫”加到故宫的搜索词里面即可
对于 Case3 ,我们这样自己拆词以后,搜索的时候将 es 的 operator 设置成 and 就没问题了
最后个人总结:
感觉 es 的设计是拿来做文章搜索的,对于名称这种搜索场景其实并不太合适。我们最终方案相当于仅仅是使用了 es 的倒排索引,而并没有用到 es 的分词功能