我正在尝试使用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中的全文本搜索功能中受益。
全文搜索非常适合查找单词,而不是子字符串。
对于子字符串搜索,最好使用PostgreSQL 9.1和/或索引like '%don%'提供的pg_trgm扩展名。但是您的索引将非常大(甚至比表大几倍),并且写入性能也不是很好。using gin (column_name gin_trgm_ops)``using gist (column_name gist_trgm_ops)
like '%don%'
pg_trgm
using gin (column_name gin_trgm_ops)``using gist (column_name gist_trgm_ops)
有一个很好的例子,使用pg_trgm在depesz blog的select *上进行子字符串搜索。