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

关于全文检索的一个问题(fts/分词)

  •  
  •   dzdh · 364 天前 · 1224 次点击
    这是一个创建于 364 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在折腾 PGSQL 的 FTS 。中文索引支持的好的也就 zhparser 、jieba 几个。

    在做索引的时候都是to_tsvector,结构是: 'keyword':pos1,pos2,pos3,类型是 text

    搜索的时候 是 to_tsquery 结构是 'keyword1' & 'keyword2' 类型是 text

    搜索的结果就看分词分的好不好。

    测试的时候,看到一个测试的文章标题是'我请你吃一个大瓜吧'。

    我就想用'吃瓜'这个词把这条数据检索出来,发现 title 的 吃瓜 不在一起,搜烂了也不可能被搜出来。

    最后,问题是,用'吃瓜'来进行检索,这条数据应该能被检索出来吗?

    9 条回复    2023-05-06 15:29:29 +08:00
    yrj
        1
    yrj  
       363 天前
    按照语义,应该吧,但分词没有,好像不具备联想能力。所以除非按照单个字分词。。
    dzdh
        2
    dzdh  
    OP
       363 天前
    @yrj 就是 ABCDE ,搜 AC/AD/AE/CE/BD 啥的中间跨词、字的。

    所以我现在做法是 按照 tsvector 的结构,自己按照英文按空格分,汉字一个个字独立存到单独的字段。

    比如 高圆圆今天吃了一个瓜

    我自己拼成 `'高':1 '圆':2,3 '今':4 '天':5 '吃':6 '瓜':10`

    搜索的时候自动一样的中文挨个按字拆开中间用 & 拼成字符串。

    搜索效果,还真不错
    dzdh
        3
    dzdh  
    OP
       363 天前
    只要不是正文 (只限文章标题、商品标题、分类名称 )混合一起搜,目前测试还不错。
    yrj
        4
    yrj  
       363 天前
    @dzdh 你这不就是我说的按照单个字拆分么,就是不知道内容多了会不会有问题。
    flyingfz
        5
    flyingfz  
       363 天前
    推荐一个东西:[meiliSearch]( https://github.com/meilisearch/meilisearch)
    一个搜索引擎,类似 ES, 但轻量一些。
    支持中文,内置分词,貌似用它来做搜索,比用 pg 合适一些,pg 还是用它来存数据吧 。
    dzdh
        6
    dzdh  
    OP
       363 天前
    @flyingfz 用过,还有 zincsearch 、tantivy ,meili 纯内存,耗不住啊。
    flyingfz
        7
    flyingfz  
       363 天前
    😂 我是简单测试过,当时测试的搜索结果还可以。

    看到还是会用到磁盘的,猜测不全是内存。
    dzdh
        8
    dzdh  
    OP
       363 天前
    @flyingfz 不晓得当初看文档是 memory search engine 。50w 数据内存 8G 撑爆了
    flyingfz
        9
    flyingfz  
       363 天前
    https://www.meilisearch.com/docs/learn/advanced/storage#memory-usage

    确实是把磁盘上的索引映射到内存了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2251 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:59 · PVG 16:59 · LAX 01:59 · JFK 04:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.