使用PostgreSQL进行关键字搜索

使用PostgreSQL进行关键字搜索,postgresql,postgresql-9.3,Postgresql,Postgresql 9.3,我试图使用关键字列表从我的数据中识别观察结果。但是,搜索结果包含的观察结果中只有部分关键字匹配。例如,关键字ice返回静脉曲张。我正在使用以下代码 select * from mytab WHERE myvar similar to'%((ice)|(cool))%'; 我尝试了\u tsquery,它与静脉曲张完全匹配,不包括观察结果。但这种方法的查询时间要长得多。(类似于'%%'的2个关键字搜索需要5秒,而\u tsquery的1个关键字搜索需要30秒。我有900多个关键字要搜索) 是否

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

select * 
from mytab
WHERE myvar similar to'%((ice)|(cool))%';
我尝试了
\u tsquery
,它与
静脉曲张
完全匹配,不包括观察结果。但这种方法的查询时间要长得多。(类似于
'%%'
的2个关键字搜索需要5秒,而
\u tsquery
的1个关键字搜索需要30秒。我有900多个关键字要搜索)


是否有一种方法可以使用
\u tsquery
查询多个关键字,以及任何加快查询过程的方法

我建议在关系意义上使用关键字,而不是在一个字段下运行关键字列表,这会导致糟糕的性能。相反,您可以使用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
中的指定条目:

从mytab中选择*
在keywords.mytab\u id=mytab.id上加入关键字
其中关键字='ice'


您还可以添加一个约束,以确保
关键字
mytab\u id
对是唯一的,这样,您就不会意外地在
mytab

中的同一条目中使用相同的
关键字
myvar
的类型是什么,您能给出一些条目的示例吗?
myvar
-类型字符,例如:“肝脏疾病\食管静脉曲张”在您的示例中,“ice”不应该与任何内容匹配,但与“liver”或“liver”匹配“疾病”应该是,对吗?是的,这是正确的。我本以为这一观察结果不会受到打击,因为myvar中没有ice或cool。但我得到的观察结果包含“静脉曲张”或“服务”,并且是
myvar
索引的?
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    ....