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

Java 系统内做全局搜索功能需要使用什么技术

  •  
  •   jiobanma ·
    banmajio · 2023-01-30 09:38:42 +08:00 · 3511 次点击
    这是一个创建于 698 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,大概类似手机的全局搜索,一个输入框,输入关键词会关联出很多待匹配项。需求是在系统内( pc )头部增加一个输入框,可以搜索到系统内的很多数据。不知道有没有描述清楚。像这种功能只有 ES 可以实现吗?

    20 条回复    2023-01-31 09:07:18 +08:00
    ql562482472
        1
    ql562482472  
       2023-01-30 09:40:18 +08:00
    其实你还可以使用其他支持全文搜索的工具:升级你的 mysql 、用 pg 之类的
    同时这种搜索必然有搜索内容、时效上有权衡和优化,作为应用开发者 这不是你跟产品需要考虑的东西么
    JarlZhang
        2
    JarlZhang  
       2023-01-30 09:45:15 +08:00
    需求简单的话 solr 就可以支持
    Wien
        3
    Wien  
       2023-01-30 09:47:36 +08:00
    复杂搜索还是建议无脑上 es
    zhuangzhuang1988
        4
    zhuangzhuang1988  
       2023-01-30 09:47:51 +08:00
    lucene 啊, 直接几个 Jar 就好了
    zhanggg
        5
    zhanggg  
       2023-01-30 09:48:20 +08:00
    看体量和命中率
    量少把相关数据写 sqllite like 都能做
    kingofzihua
        6
    kingofzihua  
       2023-01-30 09:49:55 +08:00
    如果你数据量不大,可以找个第三方对接,比如[algolia]( https://www.algolia.com/)
    xiangxiangxiang
        7
    xiangxiangxiang  
       2023-01-30 10:13:17 +08:00
    应该也可以自研吧,没搞过

    google 一下 设计一个搜索自动补全系统 ?
    realrojeralone
        8
    realrojeralone  
       2023-01-30 10:21:47 +08:00
    手机上的全局搜索是本地和服务端混合搜索,本地只搜索本机内容,远程是一套完整的搜索引擎,只做过远程的搜索,没做过本地的,应该也是一套索引之类的东西,只不过量比较小
    zhuangzhuang1988
        9
    zhuangzhuang1988  
       2023-01-30 10:22:36 +08:00
    或者看下这个<JetBrainsTV>的 live code
    用 kotlin 做一个搜索。
    jiobanma
        10
    jiobanma  
    OP
       2023-01-30 10:23:24 +08:00
    linvaux
        11
    linvaux  
       2023-01-30 10:39:56 +08:00
    上 ES 吧,一劳永逸,lucene 有点太底层了,而且索引也不方便管理
    cco
        12
    cco  
       2023-01-30 11:13:32 +08:00
    虽然 solr 也可以,但 ES 相对于 solr 更好用一点。
    jiobanma
        13
    jiobanma  
    OP
       2023-01-30 11:13:58 +08:00
    @linvaux
    @cco 谢谢啦 我研究一下
    wxw752
        14
    wxw752  
       2023-01-30 11:19:56 +08:00
    ES 方便
    honamx
        15
    honamx  
       2023-01-30 11:34:47 +08:00
    数据量不大就数据库 like 一把梭,不过迟早要改,早上 ES 早幸福
    ediron
        16
    ediron  
       2023-01-30 11:49:45 +08:00
    可以用 ES 的即时搜索
    ```
    POST index_name/_search
    {
    "query": {
    "match_phrase_prefix": {
    "name": "J"
    }
    }
    }
    ```
    matrix1010
        17
    matrix1010  
       2023-01-30 12:08:15 +08:00
    不复杂的情况下 pg 的 pg_trgm, mysql 的 ngram parser 都能处理。在语言层面实现 ngram 分词然后存到数据库里也没问题。复杂情况, 比如有很复杂的排序规则可能就只能 ES 了
    limbo0
        18
    limbo0  
       2023-01-30 12:15:31 +08:00
    看标题没看懂,是单机搜索还是 web 端服务?
    buliugu
        19
    buliugu  
       2023-01-30 20:35:41 +08:00
    老实上 ES ,去年做了类似的全局搜索,最后需求各种变化,es 都能去实现。。。换一个别的,功能支持未必有它全
    jiobanma
        20
    jiobanma  
    OP
       2023-01-31 09:07:18 +08:00
    @wxw752
    @honamx
    @ediron
    @matrix1010
    @limbo0 web 端的服务
    @buliugu
    感谢大家!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2722 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.