站内全文搜索采用什么方案比较快? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wannianma
V2EX    PHP

站内全文搜索采用什么方案比较快?

  •  
  •   wannianma 2016-07-26 17:32:54 +08:00 15607 次点击
    这是一个创建于 3366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在站点的内容到达了百万的量,突然发现原来基于 like 的站内搜索已经奇慢无比了,在网上搜了一下好像Sphinx是一种可行的方案,但还是有些纠结。希望大家帮忙提供一下思路

    66 条回复    2018-12-15 18:22:41 +08:00
    miaotaizi
        1
    miaotaizi  
       2016-07-26 17:37:19 +08:00
    xunsearch
    dong3580
        2
    dong3580  
       2016-07-26 17:41:16 +08:00
    solr
    jugelizi
        3
    jugelizi  
       2016-07-26 17:42:32 +08:00
    代码可以参考 phpcms 的 sphinx
    acrisliu
        4
    acrisliu  
       2016-07-26 17:48:32 +08:00
    elasticsearch
    wannianma
        5
    wannianma  
    OP
       2016-07-26 17:50:18 +08:00
    @miaotaizi 谢谢,我研究一下!
    wannianma
        6
    wannianma  
    OP
       2016-07-26 17:54:37 +08:00
    @dong3580 solr 只是听说过,会不会太重了?
    sinux
        7
    sinux  
       2016-07-26 17:57:17 +08:00
    @acrisliu es 感觉中文分词库没有太好的.....
    2owe
        8
    2owe  
       2016-07-26 17:59:29 +08:00
    用过 Coreseek ,基于 Sphinx ,有索引大小限制: 4G ,超过的话得自己搭分布式。官网最近挂了,但网上还能找到很多资料,用起来难度不大。

    我用的数据源是 MySQL ,索引的字段内容都不大。

    关于使用,我觉得用起来还是挺简单的。用的 PHP 哈。其实代码实现上, XunSearch , Solr , Elestic 都差不多。

    关于搜索结果,一看分词。 Coreseek 自带中文分词,我觉得用起来还行(比 XunSearch 自带的好一点), Apache 系的这俩没正式用过,听说分词效果可以调到不错的样子。二看条件过滤, Coreseek 用起来简直像在用搜索速度快很多的 MySQL 。话说,别的用起来也差不多吧。

    关于资源占用,感觉内存占用不高,与量有关,与实体索引文件对比大约是: 1vs1 。


    ===

    关于搜索的话题,我也仅仅是浅尝辄止,欢迎讨论哈。
    wannianma
        9
    wannianma  
    OP
       2016-07-26 18:04:33 +08:00
    @sinux 做科研的人其实整理除了一些不错的中文词库,中科院的 ICTCLAS 之前用过听不错。但是中文新词更新太快,词库根本没法做到百分百覆盖
    wannianma
        10
    wannianma  
    OP
       2016-07-26 18:04:45 +08:00
    @jugelizi 谢谢
    HarveyDent
        11
    HarveyDent  
       2016-07-26 18:06:26 +08:00
    我们用的是阿里云提供的搜索。
    lijinma
        12
    lijinma  
       2016-07-26 18:14:38 +08:00
    有钱可以用 阿里云 的 OpenSearch
    xujif
        13
    xujif  
       2016-07-26 18:16:41 +08:00   1
    百万级别直接用数据库的分词搜索足够。 mysql 的 match against pg 的 ts_query
    wannianma
        14
    wannianma  
    OP
       2016-07-26 18:28:26 +08:00
    @xujif 第一次接触,研究一下!
    wannianma
        16
    wannianma  
    OP
       2016-07-26 18:30:03 +08:00
    @xiaoz 之前也考虑过使用百度进行搜索,但是感觉定制性较差
    dong3580
        17
    dong3580  
       2016-07-26 18:45:21 +08:00
    @wannianma
    还好,耗 RAM 大户.
    你可以参考它的思想,
    tracymcladdy
        18
    tracymcladdy  
       2016-07-26 18:58:57 +08:00
    solr+1
    9nix00
        19
    9nix00  
       2016-07-26 19:11:58 +08:00
    百万这个级别,如果是一般的网站应用,单台 sphinx+redis 毫无压力。

    后面如果还会有爆发到上亿规模,还是老老实实上 es 吧。
    wmttom
        20
    wmttom  
       2016-07-26 20:13:53 +08:00
    elasticsearch + 1
    rale
        21
    rale  
       2016-07-26 20:20:13 +08:00
    elasticsearch + 1
    lyc1116
        22
    lyc1116  
       2016-07-26 20:53:30 +08:00
    solr, 或者可以试试 AWS 的 elasticsearch ,但是中国区还不支持。
    pango
        23
    pango  
       2016-07-26 21:57:53 +08:00
    搭车问一下繁体中文(台湾)有没有什么好的分词词库,最好直接能拿来搭配 sphinx 的 python api 用的?
    batis25
        24
    batis25  
       2016-07-26 22:24:59 +08:00
    elasticsearch
    laravel
        25
    laravel  
       2016-07-26 22:51:46 +08:00
    elasticsearch + 1
    dodo2012
        26
    dodo2012  
       2016-07-27 01:04:51 +08:00
    es+1
    strwei
        27
    strwei  
       2016-07-27 02:21:11 +08:00
    sphinx+1
    kn007
        28
    kn007  
       2016-07-27 08:31:04 +08:00
    mark ,用过 sphinx ,一般
    tomoya92
        29
    tomoya92  
       2016-07-27 09:10:50 +08:00
    没人用 hibernate search 吗?

    PS @Livid 回复快捷键貌似失效了
    ctrl/command+enter chrome 浏览器
    lszxlong
        30
    lszxlong  
       2016-07-27 09:12:49 +08:00
    elasticsearch 好用,非常方便
    wannianma
        31
    wannianma  
    OP
       2016-07-27 09:15:17 +08:00
    @xujif 试了一下, mysql 加了全文索引,果然提升很明显!
    simapple
        32
    simapple  
       2016-07-27 09:18:00 +08:00
    mysql 5.7 innodb 支持中文全文索引
    nightspirit
        33
    nightspirit  
       2016-07-27 09:32:50 +08:00
    mysql 5.6 就支持全文索引了
    lawmil
        34
    lawmil  
       2016-07-27 10:14:14 +08:00
    elasticsearch 这个比较靠谱
    dqh3000
        35
    dqh3000  
       2016-07-27 10:18:26 +08:00
    @wannianma 试过 postgres + tsquery ( tsvector , td_rank ) + gin 索引

    百万级别的文本,内容是小说,没有问题
    tabris17
        36
    tabris17  
       2016-07-27 10:26:47 +08:00
    elasticsearch + 2
    mrytsr
        37
    mrytsr  
       2016-07-27 10:30:28 +08:00 via Android
    es
    xujif
        38
    xujif  
       2016-07-27 10:33:30 +08:00
    @wannianma 好用就行,报个搜索时间?
    server
        39
    server  
       2016-07-27 10:45:18 +08:00
    es 吧,给你提供的不仅仅是全文检索
    huangzxx
        40
    huangzxx  
       2016-07-27 11:02:15 +08:00
    elasticsearch 吧
    ljbha007
        42
    ljbha007  
       2016-07-27 11:20:34 +08:00
    中小型网站用 postgresql 自带的 fts 配合中文分词插件就够了
    derek80
        43
    derek80  
       2016-07-27 12:27:30 +08:00
    elasticsearch +1
    towser
        44
    towser  
       2016-07-27 13:21:36 +08:00
    千万级 coreseek
    更多 elasticsearch
    hwsdien
        45
    hwsdien  
       2016-07-27 13:33:34 +08:00
    直接上 Elasticsearch
    minongbang
        46
    minongbang  
       2016-07-27 14:05:27 +08:00
    http://itzdm.com/ 我这个用的 xunsearch
    hyiier
        47
    hyiier  
       2016-07-27 14:12:45 +08:00
    xunsearch 不需要解决中文分词的问题,我的网站就是用 xunsearch 做的全站搜索 www.yii-china.com 可以来看看效果
    fengkuok
        48
    fengkuok  
       2016-07-27 14:22:34 +08:00
    百万级别难道没人用 PostgreSQL 的全文检索吗?当然,一次性到位的话还是用 ES 靠谱。
    Reign
        49
    Reign  
       2016-07-27 14:29:28 +08:00 via Android   1
    说句 v2 政治不正确的话,我一直觉得 elasticsearch 真的是炒作出来的东西,坑实在太多,我每次用都气的想把我的显示器砸了
    slixurd
        50
    slixurd  
       2016-07-27 14:44:49 +08:00
    @Reign 例如 ES 自己作死加了个 Type....
    你遇到什么坑了,说来听听....学习一下
    defunct9
        51
    defunct9  
       2016-07-27 15:00:00 +08:00
    @slixurd 为毛不加 Type ?加了 type 好断词吧
    fork3rt
        52
    fork3rt  
       2016-07-27 15:09:36 +08:00
    sphinx 挺好用的,文档也全。
    slixurd
        53
    slixurd  
       2016-07-27 15:19:20 +08:00
    @defunct9
    因为 Lucene 里面没有 Type 这种东西, ElasticSearch 的 Type 实际上是在整个搜索的外层加了个一个 BooleanQuery ,然后把 Type 作为一个 Filter 条件放进去搜索的伪 Type ,另外由于 5_4_x 的 BUG ,会导致性能变差大概 20%( 5_5 修复了这个问题
    defunct9
        54
    defunct9  
       2016-07-27 16:41:17 +08:00
    @slixurd 没用过 lucene ,这样就只好自己写 java 的 lucene 了。比起来还是用 e 吧。
    tianshiyeben
        55
    tianshiyeben  
       2016-07-27 16:42:43 +08:00
    elasticsearch
    wuhang89
        56
    wuhang89  
       2016-07-27 20:58:49 +08:00
    elasticsearch+1
    jimmy0017
        57
    jimmy0017  
       2016-07-27 21:01:42 +08:00
    elasticsearch 不错。但没试过
    zwh8800
        58
    zwh8800  
       2016-07-27 22:22:02 +08:00
    elasticsearch 不错, RESTful 的 api ,用着很舒服
    fire5
        59
    fire5  
       2016-07-27 22:30:23 +08:00
    Elasticsearch
    loveyu
        60
    loveyu  
       2016-07-27 22:44:41 +08:00
    Elasticsearch 面对产品神奇的需求就是个渣渣
    hard2reg
        61
    hard2reg  
       2016-07-27 23:22:48 +08:00
    google site:xxx.com keyword
    jswh
        62
    jswh  
       2016-07-28 09:10:44 +08:00
    @defunct9 elasticsearch 用的是 Lucene 的引擎,索引用 es 就可以了
    jason19659
        63
    jason19659  
       2016-07-28 10:02:02 +08:00
    elastic 5.0
    kwklover
        64
    kwklover  
       2018-01-02 14:31:29 +08:00
    可以试试搜易站内搜索引擎 http://www.searcheasy.net
    完全无需开发,点点鼠标完成站内搜索
    echope
        65
    echope  
       2018-11-19 17:27:35 +08:00
    没想到两年后用 es...
    huobazi
        66
    huobazi  
       2018-12-15 18:22:41 +08:00
    @slixurd
    @defunct9

    然鹅,type 又作死的要去掉了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5517 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:23 PVG 15:23 LAX 00:23 JFK 03:23
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86