如何在文本中查询一系列单词,但不一定在 Postgres 中立即一个接一个



有没有办法对单词序列进行全文搜索?顺序很重要,但单词之间的距离并不重要。这些单词可以彼此相邻,也可以相隔n单词。

例如,给定以下文本:The quick brown fox jumps over the lazy dog.

以下搜索应返回truequick brownquick jumpsjumps dog

但以下应返回falsebrown quickjumps foxjumps brown

仅当两个单词正好一个接一个时,<->运算符才会返回true。仅当第二个单词与第一个单词的距离正好在n时,<n>(其中 n> 0)才会返回 true。

我想到的解决方案是使用&运算符,然后使用LIKE '%firstword%secondword%'进行额外过滤,但如果有很多文档(表中将有 100.000+ 个文档),这会很慢。

Postgres中有什么快速的方法可以做到这一点吗?

您可以在此处使用正则表达式:

WITH yourTable AS (
SELECT 'The quick brown fox jumps over the lazy dog'::text AS input
)
SELECT input
FROM yourTable
WHERE input ~* '.*yquicky.*yjumpsy.*';

演示

这里使用的正则表达式,用于检测输入中的quickjumps作为单独的单词,按确切顺序,是:

.*bquickb.*bjumpsb.*

相关内容

  • 没有找到相关文章

最新更新