一尘不染

全文的Postgresql前缀通配符

sql

我正在尝试使用Postgresql运行全文查询,该查询可以使用通配符满足部分匹配要求。

在搜索词后添加后缀通配符似乎很容易,但是我无法弄清楚如何指定前缀通配符。

例如,我可以使用类似..的命令轻松地执行后缀搜索。

SELECT "t1".* 
FROM "t1" 
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', 'don:*') )

应返回与“伦敦”匹配的结果

但是我似乎无法像…那样进行前缀搜索

SELECT "t1".* 
FROM "t1" 
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don') )

理想情况下,我想在搜索字词的前端和结尾加上通配符,例如…

SELECT "t1".* 
FROM "t1" 
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don:*') )

我可以使用LIKE条件,但是我希望从Postgres中的全文本搜索功能中受益。


阅读 307

收藏
2021-03-17

共1个答案

一尘不染

全文搜索非常适合查找单词,而不是子字符串。

对于子字符串搜索,最好使用PostgreSQL 9.1和/或索引like '%don%'提供的pg_trgm扩展名。但是您的索引将非常大(甚至比表大几倍),并且写入性能也不是很好。using gin (column_name gin_trgm_ops)``using gist (column_name gist_trgm_ops)

有一个很好的例子,使用pg_trgmdepesz blog的select *进行子字符串搜索

2021-03-17