V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX  ›  程序员

全文搜索(full text search)有什么好一点的低成本解决方案?

  •  
  •   ericgui · 2022-12-04 09:04:04 +08:00 · 11218 次点击
    这是一个创建于 728 天前的主题,其中的信息可能已经有所发展或是发生改变。

    elastic search ,自己搭建太麻烦了,买服务太贵

    实在不行只能买服务了,我可没那功夫搭建

    但太贵了

    彦祖们能否有什么推荐么

    数据量很小,目前只有 15K 条数据,即便将来增长,也不会超过 1M

    62 条回复    2023-01-11 20:10:17 +08:00
    Chad0000
        2
    Chad0000  
       2022-12-04 09:07:41 +08:00 via iPhone
    我之前也是买官方服务但比较贵,后来我 docker 自建( k3s 托管),挺稳定的,还便宜。

    我数据不多,主要是用来搜索电商产品。
    ericgui
        3
    ericgui  
    OP
       2022-12-04 09:09:30 +08:00
    @Chad0000 诶,有道理哦
    likunyan
        4
    likunyan  
       2022-12-04 09:11:07 +08:00
    algolica 免费的够吗
    ericgui
        5
    ericgui  
    OP
       2022-12-04 09:12:34 +08:00
    @rushssss 谢谢,sonic 这个看着很不错
    leavic
        6
    leavic  
       2022-12-04 09:15:15 +08:00
    leavic
        7
    leavic  
       2022-12-04 09:15:50 +08:00
    搞错了,我还以为你要的是桌面搜索。。
    ericgui
        8
    ericgui  
    OP
       2022-12-04 09:16:52 +08:00
    @likunyan 不够,恰好很尴尬,我这边有不到 2 万条数据,algolica 免费的只能 1 万,但 algolica 确实比 elastic search 便宜多了
    kran
        9
    kran  
       2022-12-04 09:44:27 +08:00 via Android
    这么小的数据量,应该不需要这些服务。自己在内存里建索引就好吧
    ericgui
        10
    ericgui  
    OP
       2022-12-04 09:45:02 +08:00 via Android
    @kran 能否给个关键词?我搜搜怎么做
    demoshengxw
        11
    demoshengxw  
       2022-12-04 09:45:59 +08:00 via iPhone   ❤️ 1
    es 用 docker 很快就能部署上啊,全文搜索 es 还是好用
    optional
        12
    optional  
       2022-12-04 09:46:49 +08:00 via iPhone
    pg
    kran
        13
    kran  
       2022-12-04 10:19:12 +08:00 via Android
    @ericgui 自然语言处理,关键词提取,反向索引。
    如果用轻量级服务,可以看看 arangodb ,支持全文检索,并且可排序
    pengtdyd
        14
    pengtdyd  
       2022-12-04 10:22:19 +08:00
    直接用 mysql 不行吗,我感觉优化优化也将就用。
    dcoder
        15
    dcoder  
       2022-12-04 10:38:26 +08:00
    @ericgui
    维护 ES 就是麻烦, 用 docker/k8s 的话...得用 stateful container 来存 ES 的数据...??

    你不关心多机 scale 问题的话, 可以先试试单机 PostgreSQL, 它也有 full text search
    reeco
        16
    reeco  
       2022-12-04 10:39:10 +08:00 via iPhone
    pg 是你最好的选择
    DTCPSS
        17
    DTCPSS  
       2022-12-04 10:50:37 +08:00
    Postgresql
    kidlj
        19
    kidlj  
       2022-12-04 11:20:21 +08:00
    Postgresql
    PendingOni
        20
    PendingOni  
       2022-12-04 11:31:21 +08:00   ❤️ 1
    dzdh
        21
    dzdh  
       2022-12-04 11:32:25 +08:00
    强烈安利:

    - PostgreSQL 自带,勉强够用

    - 想要类似 ES 的,轻量的,支持 avg/cnt/sum/group 等,中文友好,支持海量数据(<1e 内),不是一股脑全塞到内存的。请移步 https://zincsearch.com/

    - 少量数据(十几百十来万不差钱的) https://www.algolia.com/
    sdshiyan2005
        22
    sdshiyan2005  
       2022-12-04 11:38:17 +08:00
    sqlite 的 fts5?
    czjxy881
        23
    czjxy881  
       2022-12-04 11:49:34 +08:00
    https://nasuyun.com/ 有 6g 免费空间的 Serverless es
    cweijan
        24
    cweijan  
       2022-12-04 11:54:28 +08:00
    es 有哪里麻烦的, 你别搞集群, 直接单机起一个就行
    garfeildma
        25
    garfeildma  
       2022-12-04 11:59:01 +08:00
    Postgre, MySql, Sqlite 都支持 full text search ,如果已经用了这些数据库直接用应该够了
    aru
        26
    aru  
       2022-12-04 12:00:11 +08:00
    ES 直接用 docker 整一个单实例就行了,很简单
    Iamsonny
        27
    Iamsonny  
       2022-12-04 12:23:18 +08:00
    elastic 不是 click 就可以运行的么~~~
    dusu
        28
    dusu  
       2022-12-04 13:10:27 +08:00 via iPhone
    楼主的需求下 manticoresearch 吊打一切
    sunnysab
        29
    sunnysab  
       2022-12-04 13:20:00 +08:00   ❤️ 1
    pg 的中文全文检索资料有点老、少,按理说是够用的。之前折腾过一段时间,按照步骤一步步来,但是自定义分词始终无法生效,就弃坑了……

    sonic 和 meilisearch 都是 rust 写的工具,前者只提供一个 index 服务。感觉他们不错。
    同蹲一个解决方案。
    beneo
        30
    beneo  
       2022-12-04 13:29:02 +08:00 via iPad
    有无 go 语言解决方案,带支持中文分词 go 语言解决方案
    liaohongxing
        31
    liaohongxing  
       2022-12-04 13:45:05 +08:00
    go 的用 zinc , rust 用 meilisearch (官方支持中文,用的 jieba 分词) , java 的 es

    es 效果好 , 但是 CPU/内存占用大,4G 左右吧 。轻量的可以用 meilisearch , 毕竟官宣支持中文。
    roundgis
        32
    roundgis  
       2022-12-04 14:03:10 +08:00 via Android
    https://mongoing.com/archives/81357

    我之前也用了類似的方法
    hackpro
        33
    hackpro  
       2022-12-04 14:08:14 +08:00 via iPhone
    Devonthink
    em70
        34
    em70  
       2022-12-04 14:23:05 +08:00
    用 mongodb 储存, 给要搜索的字段创建 TEXT 索引, 支持 TB 级数据量,有大内存就行,其他什么都不用做,全文搜索速度很快,不需要排序的搜索场景都可以满足
    lxwlxc
        35
    lxwlxc  
       2022-12-04 14:36:00 +08:00
    这么小的量,直接用 Lucene ,都不需要部署服务。ES 也是基于他的
    eudore
        36
    eudore  
       2022-12-04 14:45:26 +08:00
    postgress mysql 自带的倒排,或者用开源简化版的全文检索引擎。
    herozzm
        37
    herozzm  
       2022-12-04 14:53:49 +08:00
    docker 部署就算是集群,也是几条命令就全部搞定了
    coymail
        38
    coymail  
       2022-12-04 16:04:43 +08:00
    直接 Lucene 一把梭
    dayeye2006199
        39
    dayeye2006199  
       2022-12-04 16:05:58 +08:00
    数据库自己带的全文搜索
    shelken
        40
    shelken  
       2022-12-04 16:38:47 +08:00 via iPhone
    shelken
        41
    shelken  
       2022-12-04 16:39:22 +08:00 via iPhone
    <a href="https://smms.day/image/6vDEFjVZ9tQcMri" target="_blank"><img src="https://s2.loli.net/2022/12/04/6vDEFjVZ9tQcMri.jpg" alt="IMG_0072.jpeg"></a>
    shelken
        42
    shelken  
       2022-12-04 16:39:35 +08:00 via iPhone
    haonie
        43
    haonie  
       2022-12-04 17:05:38 +08:00
    windows 本地搜索呢?有推荐的开源项目吗? win 自带搜索不好用,listary 、everything 又不能搜索内容,其他的搜索软件也太臃肿,都没有比得上苹果的。
    yazinnnn
        44
    yazinnnn  
       2022-12-04 18:18:40 +08:00
    自建 es 麻烦在哪里....数据量不大直接跑容器里吧
    ksc010
        45
    ksc010  
       2022-12-04 18:19:33 +08:00
    ES 用 docker 很容易 一个 docker-composer 配置文件就可以搭建一个集群
    Jiajin
        46
    Jiajin  
       2022-12-04 18:52:58 +08:00
    es 搭建快的很
    documentzhangx66
        47
    documentzhangx66  
       2022-12-04 19:45:16 +08:00
    全文索引的原理,导致其质量与速度,本质就是拼成本,这玩意哪有什么低成本。

    你要想低成本,要么速度极慢,要么只做热词。

    只做热词会导致非热词信息搜不到,比如某些电商平台,搜历史订单,明明有这个关键词,但就是搜不出来,这就是这个原因。
    timnottom
        48
    timnottom  
       2022-12-04 19:55:21 +08:00
    我收藏了好几个,分享给你:

    - elasticsearch
    - zinc
    - meilisearch
    - typesense
    - sonic


    这些大多基于 go, rust 等新兴语言,特别是基于 go 的,占用资源肯定少一些。

    不过,要我说,好用的肯定是 es
    tairan2006
        49
    tairan2006  
       2022-12-04 20:44:44 +08:00
    es 单点搭建简单的很,不知道楼主在说啥
    WingPig99
        50
    WingPig99  
       2022-12-04 21:08:40 +08:00
    推荐 es
    wangfenjin
        51
    wangfenjin  
       2022-12-04 21:10:20 +08:00
    如果是单机的话,可以用 sqlite3+fts5, 然后我写的这个中文插件 https://github.com/wangfenjin/simple
    makdon
        52
    makdon  
       2022-12-04 22:50:00 +08:00
    如果数据量较小,用的是 Go 的话,可以试试这个
    我们这边业务也是 1w 条左右数据,服务启动的时候就读 DB 然后用这个库做内存索引
    不过实践发现可能花点钱买个公有云的 elastic search 的会省心很多
    https://github.com/blevesearch/bleve
    URgoy
        53
    URgoy  
       2022-12-04 22:52:44 +08:00 via iPhone
    Aloento
        54
    Aloento  
       2022-12-04 23:11:14 +08:00
    对于全文搜索,您可以考虑使用 Apache Solr 或 Apache Lucene 。它们都是开源的全文搜索工具,而且比较容易使用。它们都提供了许多强大的功能,包括分词、拼写纠错和结果排序,可以帮助您快速、高效地进行全文搜索。

    此外,如果您的数据量很小,您可以考虑使用 SQLite 数据库。SQLite 是一种轻量级的关系数据库,它可以运行在各种平台上,包括桌面和移动设备。它非常容易上手,而且可以满足您的数据量要求,即使将来数据量增长到 1M 。

    总而言之,对于您的需求,Apache Solr 或 Apache Lucene 和 SQLite 数据库都是不错的选择。它们都是开源的,易于使用,并且提供了许多强大的功能,可以帮助您进行全文搜索。此外,它们都是低成本的解决方案,可以满足您的需求。
    CX
        55
    CX  
       2022-12-04 23:49:08 +08:00
    sphinx ?不吃配置,只是搭建维护比较麻烦
    magnetar
        56
    magnetar  
       2022-12-05 10:09:27 +08:00
    说下我用过的吧,
    sphinx 优点:配置简单,索引快(但是分词太细 2 千万需要 7 分钟左右),最多占用 1g 内存,php 、python 对接方便,缺点:增量更新麻烦,搜索后返回 id 需要走一遍数据库查询,
    typesense:我索引到 1 千万的时候崩了,问题应该是内存不够,
    zinc 优点:配置简单,不怎么占用内存,语言对接方便,支持大部分 es 的语法,缺点:需要固态硬盘,不知道是不是我配置的问题,占用磁盘空间超级大(有相关配置但是设置了不生效)。
    meilisearch:看了文档直接放弃,没有尝试。
    sonic:跟 sphinx 差不多,没有尝试
    elasticsearch:现在在用的,缺点就是吃内存(也还好,数据没上亿单机还是没什么压力),配置繁琐。
    其实很简单的问题,搜索要想玩的花就上 es ,何况你说后面数据量要上 M ,大数据就直接无脑 es 了啊,
    jinsongzhao
        57
    jinsongzhao  
       2022-12-05 12:29:31 +08:00
    看来开始遍地开花时期了。数据库自带的; Lucene 的 java 系列; go ; rust; C++应该也有(比如 AnyTxt )。不知道哪家方案接近技术完善了,如果没有出现完善的(多语种支持),那还是最低成本数据库自带的跑跑看了
    brader
        58
    brader  
       2022-12-05 15:43:43 +08:00
    最低成本的应该还是直接用现有的 mysql 的 full text 索引,我的项目中也在大量使用,这个东西简单使用完全没问题的,你可以先尝试,而且它的尝试成本低到几乎没有。
    010203kk
        59
    010203kk  
       2022-12-06 19:19:18 +08:00
    ReSearch--考据级搜索引擎微服务系统
    https://github.com/liaoran123/research
    javafans
        60
    javafans  
       2022-12-17 22:54:47 +08:00
    nasuyun.com 不香吗
    ENNRIaaa
        61
    ENNRIaaa  
       2022-12-21 16:09:18 +08:00
    Meilisearch ,使用 Rust 开发的搜索引擎,并且对中文搜索很友好,不需要额外的配置,可以参考下。
    mejee
        62
    mejee  
       2023-01-11 20:10:17 +08:00
    同求。主要还是小公司的场景下,用啥服务都束手束脚的,要么没钱,要么没经历维护(毕竟多维护一个服务,还要保证稳定性),准备实在不行就基于现有的存储自己写一个简单的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2701 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:40 · PVG 15:40 · LAX 23:40 · JFK 02:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.