在这里发布一个关于如何提高我的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 '"%';