最近在折腾 PGSQL 的 FTS 。中文索引支持的好的也就 zhparser 、jieba 几个。
在做索引的时候都是to_tsvector
,结构是: 'keyword':pos1,pos2,pos3
,类型是 text
搜索的时候 是 to_tsquery
结构是 'keyword1' & 'keyword2'
类型是 text
搜索的结果就看分词分的好不好。
测试的时候,看到一个测试的文章标题是'我请你吃一个大瓜吧'。
我就想用'吃瓜'这个词把这条数据检索出来,发现 title 的 吃瓜
不在一起,搜烂了也不可能被搜出来。
最后,问题是,用'吃瓜'来进行检索,这条数据应该能被检索出来吗?
1
yrj 2023-05-05 19:33:56 +08:00
按照语义,应该吧,但分词没有,好像不具备联想能力。所以除非按照单个字分词。。
|
2
dzdh OP @yrj 就是 ABCDE ,搜 AC/AD/AE/CE/BD 啥的中间跨词、字的。
所以我现在做法是 按照 tsvector 的结构,自己按照英文按空格分,汉字一个个字独立存到单独的字段。 比如 高圆圆今天吃了一个瓜 我自己拼成 `'高':1 '圆':2,3 '今':4 '天':5 '吃':6 '瓜':10` 搜索的时候自动一样的中文挨个按字拆开中间用 & 拼成字符串。 搜索效果,还真不错 |
3
dzdh OP 只要不是正文 (只限文章标题、商品标题、分类名称 )混合一起搜,目前测试还不错。
|
5
flyingfz 2023-05-06 15:08:54 +08:00
推荐一个东西:[meiliSearch]( https://github.com/meilisearch/meilisearch)
一个搜索引擎,类似 ES, 但轻量一些。 支持中文,内置分词,貌似用它来做搜索,比用 pg 合适一些,pg 还是用它来存数据吧 。 |
7
flyingfz 2023-05-06 15:16:01 +08:00
😂 我是简单测试过,当时测试的搜索结果还可以。
看到还是会用到磁盘的,猜测不全是内存。 |
9
flyingfz 2023-05-06 15:29:29 +08:00
|