前端之家收集整理的这篇文章主要介绍了
PostgreSQL:全文搜索 – 如何搜索部分单词?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
404_0@
在这里发布一个关于如何提高我的
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 '"%';