V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
wannianma
V2EX  ›  PHP

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

  •  
  •   wannianma · Jul 26, 2016 · 16035 views
    This topic created in 3562 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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


    ===

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

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

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

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

    然鹅,type 又作死的要去掉了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1212 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 135ms · UTC 17:57 · PVG 01:57 · LAX 10:57 · JFK 13:57
    ♥ Do have faith in what you're doing.