PostgreSQL 中的高效全文搜索,在另一列上排序

互联网 行业动态 更新时间:2024-06-13 00:19:32

Lau*_*lbe 5

这并不容易解决:全文搜索需要 GIN 索引,但 GIN 索引不支持ORDER BY. 此外,如果您有一个ORDER BY用于全文搜索的 B-tree 索引和一个 GIN 索引,则可以使用位图索引扫描将它们组合起来,但位图索引扫描也不支持ORDER BY

如果您创建自己的“停用词”列表,其中包含数据中的所有常用词(除了正常的英语停用词),我看到了一定的可能性。然后,您可以定义使用该停用词文件的文本搜索词典和english_rare使用该词典的文本搜索配置。

然后,您可以使用该配置创建全文索引,并分两步进行查询,如下所示:

寻找稀有词:

SELECT *
FROM (SELECT *
      FROM tbl
      WHERE va @@ to_tsquery('english_rare', 'test')
      OFFSET 0) AS q
ORDER BY b LIMIT 100;

子查询OFFSET 0将阻止优化器扫描b.

对于罕见的单词,这将很快返回正确的结果。对于频繁出现的单词,这将不返回任何内容,因为to_tsquery将返回一个空结果。要区分因单词未出现而导致的未命中和因单词频繁出现而导致的未命中,请注意以下注意事项:

SELECT *
FROM (SELECT *
      FROM tbl
      WHERE va @@ to_tsquery('english_rare', 'test')
      OFFSET 0) AS q
ORDER BY b LIMIT 100;

寻找常用词(如果第一个查询给了您通知):

SELECT *
FROM (SELECT *
      FROM tbl
      ORDER BY b) AS q
WHERE va @@ to_tsquery('english', 'test')
LIMIT 100;

注意我们这里使用的是正常的英文配置。这将始终扫描索引,b并且对于频繁的搜索词将相当快。

更多推荐

高效,全文,PostgreSQL

本文发布于:2023-04-21 09:59:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/1be5341d451adf24223dffb39847fadd.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:高效   全文   PostgreSQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!