V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Pengxiguaa
V2EX  ›  数据库

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

  •  
  •   Pengxiguaa · 2020-08-27 11:18:01 +08:00 · 1168 次点击
    这是一个创建于 1550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    准备

    • analyzer: ik_max_word
    • text: “我想我能够”
    • keywords: “我想”

    目的

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

    问题

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

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

    7 条回复    2020-08-27 13:18:08 +08:00
    zakokun
        1
    zakokun  
       2020-08-27 11:29:24 +08:00 via iPhone
    2 个办法

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





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

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

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

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

    如果是在做项目需要搜索的话,且不想折腾的话,自荐下我们做的卡拉搜索 kalasearch.com 不用自己搞分词之类,全托管了。作为工程师的你时间很宝贵,应该用来学习或者解决业务问题,搜索可以交给我们 :)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   879 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.