postgresql查找相似的词组

postgresql查找相似的词组,postgresql,full-text-search,string-matching,varchar,Postgresql,Full Text Search,String Matching,Varchar,我有一个包含a列的table1,其中存储了大约100000个字符串(varchar)。不幸的是,每个字符串都有多个用空格分隔的单词。此外,它们的长度不同,即一个字符串可以包含3个单词,而另一个字符串包含7个单词 然后我在第二个表2中存储了一个列B,它以相同的方式只包含100个字符串。因此,每个字符串有多个单词,用空格分隔 目标是,查看B列的一条记录与a列的多条记录(基于单词)匹配的可能性。结果也应该有一个排名。我曾考虑在循环中使用全文搜索,但我不知道如何做到这一点,或者是否有合适的方法来实现这一

我有一个包含a列的table1,其中存储了大约100000个字符串(varchar)。不幸的是,每个字符串都有多个用空格分隔的单词。此外,它们的长度不同,即一个字符串可以包含3个单词,而另一个字符串包含7个单词

然后我在第二个表2中存储了一个列B,它以相同的方式只包含100个字符串。因此,每个字符串有多个单词,用空格分隔

目标是,查看B列的一条记录与a列的多条记录(基于单词)匹配的可能性。结果也应该有一个排名。我曾考虑在循环中使用全文搜索,但我不知道如何做到这一点,或者是否有合适的方法来实现这一点?

我不知道是否可以将表“t”到字典中,以便在此处使用全文进行排名。但是你可以很容易地用一些原始排名来查询它,例如:

t=# with a(a) as (values('a b c'),('a c d'),('b e f'),('r b t'),('q w'))
, b(i,b) as (values(1,'a b'), (2,'e'), (3,'b'))
, p as (select unnest(string_to_array(b.b,' ')) arr,i from b)
select a phrases,arr match_words,count(1) over (partition by arr) words_in_matches, count(1) over (partition by i) matches,i from a left join p on a.a like '%'||arr||'%';
 phrases | match_words | words_in_matches | matches | i
---------+-------------+------------------+---------+---
 r b t   | b           |                6 |       5 | 1
 a b c   | b           |                6 |       5 | 1
 b e f   | b           |                6 |       5 | 1
 a b c   | a           |                2 |       5 | 1
 a c d   | a           |                2 |       5 | 1
 b e f   | e           |                1 |       1 | 2
 r b t   | b           |                6 |       3 | 3
 a b c   | b           |                6 |       3 | 3
 b e f   | b           |                6 |       3 | 3
 q w     |             |                1 |       1 |
(10 rows)
  • 短语是大桌子上的行
  • match_单词是小表中的标记(按空格分隔)
  • 单词_in_与短语中的标记数量匹配
  • matches是从小表短语到大表短语的匹配量
  • 我从小表格中检索短语

因此,您可以按第三列或第四列排序以获得某种排序…

谢谢您的回答。因为我是pgsql的新手,所以我根本不懂它。你说代币是什么意思?代币是单词,为了简单起见,我用空格分隔字母。阅读概念