PostgreSQL:全文搜索 – 如何搜索部分单词?
发布时间:2020-12-13 16:19:29 所属栏目:百科 来源:网络整理
导读:在这里发布一个关于如何提高我的SQL搜索方法之一的速度的问题之后,建议我更新我的表以使用全文搜索.这是我现在所做的,使用Gist索引来更快地搜索.在一些“平常”的查询中,我注意到一个明显的增加,我很高兴. 但是,我在搜索部分单词时遇到困难.例如,我有几个记
在这里发布一个关于如何提高我的SQL搜索方法之一的速度的问题之后,建议我更新我的表以使用全文搜索.这是我现在所做的,使用Gist索引来更快地搜索.在一些“平常”的查询中,我注意到一个明显的增加,我很高兴.
但是,我在搜索部分单词时遇到困难.例如,我有几个记录包含Squire(454)这个词,我有几个记录包含松鼠(173).现在,如果我搜索Squire,它只返回454条记录,但是我也希望它返回松鼠记录. 我的查询看起来像这样 SELECT title FROM movies WHERE vectors @@ to_tsoquery('squire'); 我以为我可以做to_tsquery(‘乡绅%’),但这不行. 另外,在我的数据库中,我有记录是电影和其他只是电视节目.这些都被“”的名字区分开来,所以像“Munsters”是电视节目,而“明星”则是这部电影.我想要做的只是搜索电视节目和电影.关于如何实现这一点的任何想法? 问候
即使使用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 '"%'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |