有没有办法对单词序列进行全文搜索?顺序很重要,但单词之间的距离并不重要。这些单词可以彼此相邻,也可以相隔n
单词。
例如,给定以下文本:The quick brown fox jumps over the lazy dog
.
以下搜索应返回true
:quick brown
、quick jumps
、jumps dog
。
但以下应返回false
:brown quick
、jumps fox
、jumps 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.*';
演示
这里使用的正则表达式,用于检测输入中的quick
和jumps
作为单独的单词,按确切顺序,是:
.*bquickb.*bjumpsb.*