Sql 具有任意子句的Postgres相似性运算符-每个参数的限制?

Sql 具有任意子句的Postgres相似性运算符-每个参数的限制?,sql,postgresql,Sql,Postgresql,我有一个问题: SELECT word, similarity(word, 'foo') as "similarity" FROM words WHERE word ~* 'foo' ORDER BY similarity DESC LIMIT 5 在搜索过程中,每个词都会被调用。例如,搜索“英国牛津大学”将调用此查询3次 我现在想写一个查询,它可以在访问数据库的一次过程中找到所有3个类似的单词,到目前为止,我有如下内容: SELECT set_limit(0.4); SELECT

我有一个问题:

SELECT 
  word, 
  similarity(word, 'foo') as "similarity"
FROM words
WHERE word ~* 'foo'
ORDER BY similarity DESC
LIMIT 5
在搜索过程中,每个词都会被调用。例如,搜索“英国牛津大学”将调用此查询3次

我现在想写一个查询,它可以在访问数据库的一次过程中找到所有3个类似的单词,到目前为止,我有如下内容:

SELECT set_limit(0.4);
SELECT word
FROM words
WHERE word % ANY(ARRAY['foo', 'bar', 'baz']);
然而,我想不出一种方式来说‘每个单词给我5个结果’


有没有写这个的方法?谢谢。

在%条件下卸载要搜索并加入的单词数组,而不是将其应用于何处,然后为每个搜索单词的行编号,并根据该编号进行筛选:

SELECT subq.search_word
     , subq.word
  FROM (SELECT srch.word as search_word
             , wrd.word 
             , ROW_NUMBER() OVER (PARTITION BY srch.word ORDER BY similarity(wrd.word, srch.word) DESC) AS rn
          FROM words wrd
          JOIN UNNEST(ARRAY['foo', 'bar']) as srch(word)
            ON wrd.word % srch.word) subq
 WHERE subq.rn <= 5

取消对正在搜索的单词数组的嵌套,并在%条件下联接,而不是将其应用于WHERE,然后对每个搜索单词的行进行编号,并根据该编号进行筛选:

SELECT subq.search_word
     , subq.word
  FROM (SELECT srch.word as search_word
             , wrd.word 
             , ROW_NUMBER() OVER (PARTITION BY srch.word ORDER BY similarity(wrd.word, srch.word) DESC) AS rn
          FROM words wrd
          JOIN UNNEST(ARRAY['foo', 'bar']) as srch(word)
            ON wrd.word % srch.word) subq
 WHERE subq.rn <= 5

我刚刚编辑了我的答案,以包括按相似性排序,在这种情况下,我想仍然需要排号。谢谢,效果很好。。在各种情况下,join unnest array技巧似乎都很棒!我刚刚编辑了我的答案,以包括按相似性排序,在这种情况下,我想仍然需要排号。谢谢,效果很好。。在各种情况下,join unnest array技巧似乎都很棒!