我在PostgreSQL中有一个很大的单词表,它有一个操作映射到一个数字,如果单词匹配它应该执行。例如:
words_table
words | operation
-----------------
fox | 1
brown | 2
cow | 1
moo | 3
...
我希望能够提供一个字符串,并查看表中的operations
是输入的子字符串,忽略大小写。例如,两个输入字符串:
How brown are your cows and foxes?
Howbrownareyourcowsandfoxes?
会返回1, 2
。这对我来说是一个不寻常的问题,因为我想使用单词表作为"输入"的数据。我意识到这个操作将导致全表扫描,我需要做一个operations
的联合/不同,但我不知道如何启动我的查询/子查询(我想象我必须在某处使用CONTAINS / LIKE子查询)使表成为检查子字符串的输入。
任何制定SQL语句或策略的帮助都将受到赞赏。
答案 0 :(得分:2)
因为您没有处理单词(分隔的字符串),所以不使用全文索引。您可以在ngrams上取得一些进展。
基本查询是
select distinct wt.operation
from words_table wt
where YOURSTRING like '%' || wt.words || '%';