[求助] 关于 elasticSearch 中文分词插件 IK 分词机制的疑问

2020-08-27 11:18:01 +08:00
 Pengxiguaa

准备

目的

检索出必须包含关键词“我想”的数据。

问题

在写入数据时,ik_max_word 会将文本拆分为“我”、“想我”和“能够”但不存在“我想”,所以导致搜索无果。

我不知道是我的用法不对还是插件分词不够细,难道需要将文本拆分为“我”、“我想”、“我想我”、“我想我能”....

983 次点击
所在节点    数据库
7 条回复
zakokun
2020-08-27 11:29:24 +08:00
2 个办法

1. 你把“我想”加到自定词库里面,刷一遍数据,分词插件就能把“我想”作为一个词了
2. 使用单字分词,然后搜索的使用 match_phrase
polaris8977
2020-08-27 11:30:08 +08:00
自己定制一下词库啊, "我想"没在你的词库里面
murmur
2020-08-27 11:33:56 +08:00
你说的是 ngram 分词,ngram 拆出来应该是





我想
想我
我能
能够
我想我
想我能
我能够
。。。。。
这种拆词太暴力了,很少有这么拆的,效率太低结果也不好看,说白了还是字典拆词不行,可以考虑下用算法的,以前我们就用 crf 分词,字典分词效率高但是准确度不行
Pengxiguaa
2020-08-27 12:09:42 +08:00
@zakokun 感谢
Pengxiguaa
2020-08-27 12:09:53 +08:00
@polaris8977 感谢
Pengxiguaa
2020-08-27 12:10:05 +08:00
@murmur 感谢
KalaSearch
2020-08-27 13:18:08 +08:00
CJK 语言做查询的时候如果非常在乎召回的话,ngram 也是可以考虑的(类似你这写的:我,我想...)

如果索引本身没那么大的话,对中文分词来说 N 取个 10 就完全够了,这样索引大小最多也就是 10 倍。目前 SSD 这么便宜的状况下问题不大

当然如果实在索引大小有限制(边缘计算、嵌入之类情景,或者数据真的太大)那可以像一楼说的自定义一些词库。

如果是以学习为目的的话推荐读: https://github.com/ysc/cws_evaluation

如果是在做项目需要搜索的话,且不想折腾的话,自荐下我们做的卡拉搜索 kalasearch.com 不用自己搞分词之类,全托管了。作为工程师的你时间很宝贵,应该用来学习或者解决业务问题,搜索可以交给我们 :)

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

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

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

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

© 2021 V2EX