Pengxiguaa
V2EX  ›  数据库

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

  •  
  •   Pengxiguaa · Aug 27, 2020 · 1877 views
    This topic created in 2098 days ago, the information mentioned may be changed or developed.

    准备

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

    目的

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

    问题

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

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

    7 replies    2020-08-27 13:18:08 +08:00
    zakokun
        1
    zakokun  
       Aug 27, 2020 via iPhone
    2 个办法

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





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

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

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

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

    如果是在做项目需要搜索的话,且不想折腾的话,自荐下我们做的卡拉搜索 kalasearch.com 不用自己搞分词之类,全托管了。作为工程师的你时间很宝贵,应该用来学习或者解决业务问题,搜索可以交给我们 :)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3070 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 14:39 · PVG 22:39 · LAX 07:39 · JFK 10:39
    ♥ Do have faith in what you're doing.