V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ota
V2EX  ›  问与答

最近在看全文检索+分词,头都大了。

  •  
  •   ota · 2015-02-13 20:40:17 +08:00 · 3483 次点击
    这是一个创建于 3568 天前的主题,其中的信息可能已经有所发展或是发生改变。

    like不能索引,但模糊搜索是非常有必要的,比如搜索2ex,你想结果中会包含v2ex,这比较符合需求是吧。

    现在尝试了几个,mysql-ftppc , sphinx 等。无果,主要还是词库不行。比如sphinx for chinese,词库没办法实现复合分词,意味着,搜索 特别申明 有结果,单独搜索 申明 没结果的尴尬。这彻底打消了我想加入智能学习的方案,来对词库进行增量。

    P.S 有人吐槽,你不会直接用coreseek啊!不能用,不要问原因。

    数据库是mysql,条目大概4w。算小型应用,如果不丢失模糊搜索,又能顺利索引呢?查阅了一些文章,说是建立反向索引+缓存,索引词,连续词,以及句子。然后缓存热门。

    搞了几天了。技术和运维也头大了。

    实在搞不定,我也只能砸硬件了。不研究这玩意了。主要也是实验性质,为以后项目策略留个备胎,涨点经验。真心不想遇到事情就硬件升级,说真的,无非就是增加一台mysql读而已。但技术不会有太大进步。嘛,我有点太考虑远期目标了。

    话说aws的cloudsearch是虾米玩意?这东西是所谓的云搜索?让第三方托管?这延迟。。。说是堪称毫秒级别的,不过走外网的吧。这玩意能有多少实用性?

    13 条回复    2015-02-14 08:29:55 +08:00
    aszxqw
        1
    aszxqw  
       2015-02-13 20:48:56 +08:00
    为什么搜索2ex结果就得出来v2ex?
    如果真的需求是这样的话,就搞个同义词词典呗。
    binux
        2
    binux  
       2015-02-13 20:49:04 +08:00
    『比如搜索2ex,你想结果中会包含v2ex,这比较符合需求是吧』
    不是吧
    aszxqw
        3
    aszxqw  
       2015-02-13 20:49:16 +08:00
    至少我百度2ex了没出来v2ex
    ota
        4
    ota  
    OP
       2015-02-13 20:54:25 +08:00
    @aszxqw coreseek可以实现同义词,来达到复合分词的效果。不过有一些原因,无法使用coreseek。
    还有其他解决方案不?当前在摸索mroonga,分词方法太多了。正在尝试。
    @binux 好吧,我这个例子有些脑残。比如ffer,我想结果里包含offer。这不算反人类的要求吧。话说用惯了like后,突然告诉我分词库依赖,我实在无法接受。
    decken
        5
    decken  
       2015-02-13 21:00:42 +08:00
    @aszxqw
    放狗搜 2ex也没出来v2ex
    ota
        6
    ota  
    OP
       2015-02-13 21:03:06 +08:00
    @decken 比如搜索 建的更
    百度似乎结果更本地化,但并不一定是要的结果,比如 “建设 建设得 建设+更加” 很多不是连续性的。
    谷歌对这类片段的没啥意义的词似乎倾向于作为单个分词处理,搜索结果更多的是“建的更”,时不时还发现有“bigram”类型的,“建的 and 的更”,多数也比较符合要求。感觉谷歌更贴切想要的结果。
    firldlove
        7
    firldlove  
       2015-02-13 22:16:50 +08:00 via iPad
    Elasticsearch非常好用
    xi4oh4o
        8
    xi4oh4o  
       2015-02-13 22:55:47 +08:00
    coreseek 为什么不能用呢?
    Elastisearch + jdbc river + ik
    em70
        9
    em70  
       2015-02-13 23:34:28 +08:00 via Android
    才4W,用like有多大问题
    ota
        10
    ota  
    OP
       2015-02-14 06:11:19 +08:00
    @em70 不光是只有4w,而且机器用的是1650 v3 ddr4 ssd s3700
    问题就是搜索非常频繁。流量很大,虽然站小库也小。
    em70
        11
    em70  
       2015-02-14 07:33:01 +08:00 via Android
    @ota 测试过吗,like需要多长时间,搜索关键词集中吗,如果很集中加缓存就行了。

    你得分析一下需求,这种2ex搜索v2ex的场景是否频繁发生?如果只是极端案例,可以用MySQL全文索引,先match搜索,如果搜索不到再用like,并缓存
    sunsol
        12
    sunsol  
       2015-02-14 08:26:13 +08:00
    条目才4w,直接grep就行了。
    sunsol
        13
    sunsol  
       2015-02-14 08:29:55 +08:00
    如果条目经常更新同时担心效率的话,就用sqlite装载为内存数据库,直接用like简单粗暴。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3422 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.