使用PostgreSQL进行关键字搜索

时间:2018-04-28 00:07:49

标签: postgresql postgresql-9.3

我正在尝试使用关键字列表从我的数据中识别观察结果。但是,搜索结果包含只有部分关键字匹配的观察结果。例如,关键字ice会返回varices。我使用以下代码

select * 
from mytab
WHERE myvar similar to'%((ice)|(cool))%';

我尝试了_tsquery,它完全匹配并且不包含varices的观察结果。但这种方法花费的时间要长得多。 (2个关键字搜索类似于'% %'需要5秒,而_tsquery需要30秒才能进行1个关键字搜索。我有超过900个关键字要搜索)

select * 
from mytab
where myvar @@ to_tsquery(('ice'));

有没有办法使用_tsquery查询多个关键字以及加快查询过程的任何方法。

1 个答案:

答案 0 :(得分:1)

我建议在关系意义上使用关键字,而不是在一个字段下运行它们,这会导致糟糕的性能。相反,您可以拥有一个关键字表,其中id为主键,外键引用mytab的主键。所以你最终会得到以下结论:

keywords table 
id | mytab_id | keyword  
----------------------
1      1        liver
2      1        disease
3      1        varices
4      2        ice

mytab table
id | rest of fields
---------------------
 1    ....
 2    ....

然后,您可以执行内部联接以查找mytab中指定条目所属的关键字:

SELECT * FROM mytab JOIN keywords ON keywords.mytab_id = mytab.id WHERE keyword = 'ice'

您还可以添加约束以确保keywordmytab_id对是唯一的,这样您就不会意外地为同一条目输入相同的keyword mytab