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

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

  •  
  •   jiobanma ·
    banmajio · Jan 30, 2023 · 4227 views
    This topic created in 1192 days ago, the information mentioned may be changed or developed.

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

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

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