我试图使用
Postgresql运行一个全文查询,可以使用通配符来满足部分匹配.
在搜索字词后面有一个后缀通配符似乎很简单,但是我无法弄清楚如何指定一个前缀通配符.
例如,我可以使用类似的东西来轻松地执行后缀搜索
SELECT "t1".* FROM "t1" WHERE (to_tsvector('simple',"t1"."city") @@ to_tsquery('simple','don:*') )
应该返回结果匹配“伦敦”
但是我似乎没有做一个前缀搜索…
SELECT "t1".* FROM "t1" WHERE (to_tsvector('simple',':*don') )
理想情况下,我想在通配符前面加上搜索字词的前端和末尾,类似…
SELECT "t1".* FROM "t1" WHERE (to_tsvector('simple',':*don:*') )
全文搜索对于查找单词而非子字符串很有用.
对于子字符串搜索,您最好使用像’%don%’与pg_trgm扩展可用Postgresql 9.1和使用gin(column_name gin_trgm_ops)或使用gist(column_name gist_trgm_ops)索引.但是你的索引会很大(甚至比你的表大几倍),并且写性能不是很好.
select * from depesz blog有very good example of using pg_trgm for substring search.