PostgreSQL:全文搜索 – 如何搜索部分单词?

前端之家收集整理的这篇文章主要介绍了PostgreSQL:全文搜索 – 如何搜索部分单词?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这里发布一个关于如何提高我的sql搜索方法之一的速度的问题之后,建议我更新我的表以使用全文搜索.这是我现在所做的,使用Gist索引来更快地搜索.在一些“平常”的查询中,我注意到一个明显的增加,我很高兴.

但是,我在搜索部分单词时遇到困难.例如,我有几个记录包含Squire(454)这个词,我有几个记录包含松鼠(173).现在,如果我搜索Squire,它只返回454条记录,但是我也希望它返回松鼠记录.

我的查询看起来像这样

SELECT title 
FROM movies 
WHERE vectors @@ to_tsoquery('squire');

我以为我可以做to_tsquery(‘乡绅%’),但这不行.
如何让它搜索部分比赛?

另外,在我的数据库中,我有记录是电影和其他只是电视节目.这些都被“”的名字区分开来,所以像“Munsters”是电视节目,而“明星”则是这部电影.我想要做的只是搜索电视节目和电影.关于如何实现这一点的任何想法?

问候
Anthoni

即使使用LIKE,你将无法从乡绅%得到“松鼠”,因为“松鼠”有两个’r’.要获得Squire和Squirrel,您可以运行以下查询
SELECT title FROM movies WHERE vectors @@ to_tsquery('squire|squirrel');

要区分电影和电视节目,您应该在数据库添加一列.然而,有很多方法来皮肤这只猫.您可以使用子查询来强制postgres首先找到匹配“乡绅”和“松鼠”的电影,然后搜索该子集以查找以“”开头的标题,可以创建用于“LIKE” “%…”搜索.

没有探索其他索引的可能性,你也可以运行这些 – 与他们混乱找到哪个是最快的:

SELECT title 
FROM (
   SELECT * 
   FROM movies 
   WHERE vectors @@ to_tsquery('squire|squirrel')
) t
WHERE title ILIKE '"%';

要么

SELECT title 
FROM movies 
WHERE vectors @@ to_tsquery('squire|squirrel') 
  AND title ILIKE '"%';

猜你在找的Postgre SQL相关文章