我正在尝试使用关键字列表从我的数据中识别观察结果。但是,搜索结果包含只有部分关键字匹配的观察结果。例如,关键字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
查询多个关键字以及加快查询过程的任何方法。
答案 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'
您还可以添加约束以确保keyword
和mytab_id
对是唯一的,这样您就不会意外地为同一条目输入相同的keyword
mytab
。