es 搜索问题请教

2019-04-03 11:21:43 +08:00
 reid2017

索引分词使用 ik_max_word,es 里有些数据是连续的汉字,如
哈哈哈哈哈哈...

搜索的时候,输入 [哈哈] 或 [哈哈哈] 或 [哈哈哈哈] 一般能搜索到,但如果搜索单个字 [哈] ,却搜索不到。

同样的,有一串数字字符 [ 1111 ] ,只能用 [ 1111 ] 搜索到, [ 1 ] [ 11 ] [ 111 ] 都搜索不到。

有没有大佬给点思路如何解决?

3714 次点击
所在节点    Elasticsearch
12 条回复
misaka19000
2019-04-03 11:32:58 +08:00
先看一下分词的结果是什么,看这个句子被分成了哪些词
rogwan
2019-04-03 11:35:05 +08:00
你这个的结果像是 ik_smart 索引的,不像是 ik_max_word 出来的结果啊。你换个分词重新索引一下试试
reid2017
2019-04-03 11:38:06 +08:00
@misaka19000
@rogwan
我用 analyze 接口分析出来的也是只有 [哈哈] ,所以是不是我哪里配置不对

reid2017
2019-04-03 11:38:42 +08:00
es 版本:6.5.1
reid2017
2019-04-03 11:39:50 +08:00
三个字 [哈哈哈] 也是没有单字 [哈]

lawler
2019-04-03 11:41:11 +08:00
哈,不是词。

意思就是,你的词库里没有哈。
qping
2019-04-03 11:49:36 +08:00
比如“你好,您的发票号是 11111 ”,经过分词器,把 “ 11111 ” 分成了一个词,建立倒排索引,然后“ 11111 ”就可以搜到了。 “ 1 ” 搜不到是因为没有分出 “ 1 ” 这个词,如果所有单个词都建索引,索引会特别大。你可以考虑下你的需求,真的需要 输入“ 1 ” 搜到所有文档吗。
1、能不能输入“ 1 ”时出现下拉框,做联想提醒呢,给用户推荐一些热门的关键词。比如淘宝搜索“女”,会出现下拉列表:“女装”、“女鞋”、“女包”
2、对数字或者文字按建立索引,比如 “ 1234 ” 分词为 "12" "23" "34",减少索引的量,同时搜索的时候输入 "12" 也能够得到相关的结果
3、实在不行,可以模糊搜索
reid2017
2019-04-03 11:50:13 +08:00
@lawler 好像懂了。。
qping
2019-04-03 11:50:51 +08:00
@reid2017 #5 你的词典里,就没有“哈” 这个词
reid2017
2019-04-03 11:51:05 +08:00
@qping 谢谢,大概明白了
leriou
2019-04-03 12:05:57 +08:00
不管是 ik_smart 还是 ik_max_word 都不会把 哈 单独做分词, es 单个字段可以配置多个分词器, 在配置个标准分词器就可以了, 搜索的时候同时搜索多个分词字段, 权重自己调一下就行了
reid2017
2019-04-03 12:11:01 +08:00
@qping
字典里应该是 [哈] 的,因为另外一些数据,比如 [xxxxx 哈 xxxxx] ,这样的一长串字符里只有一个 [哈] 字,搜索单字 [哈] 时能搜索出来,只是匹配不出有连字的 [哈] 的内容,这是为什么呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/551582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX