我有一个包含A列的table1,其中存储了~100,000个字符串(varchar)。不幸的是,每个字符串都有多个单词,这些单词用空格分隔。此外,它们具有不同的长度,即一个字符串可以由3个字组成,而另一个字符串包含7个字。
然后我在第二个table2中存储了一个列B,它以相同的方式只包含100个字符串。因此,每个字符串有多个单词,用空格分隔。
目标是,根据单词,查看B列记录与A列的多个记录匹配的可能性。结果也应该有一个排名。我想在循环中使用全文搜索,但我不知道如何做到这一点,或者是否有正确的方法来实现这一目标?
答案 0 :(得分:0)
我不知道你能否" tturn"表到字典,使用全文进行排名。但你可以很容易地用一些primityve排名查询它,例如:
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)
所以你可以通过第三或第四列订购以获得某种排名...