Pau*_*rey 20 sql postgresql full-text-search full-text-indexing
我正在尝试使用Postgresql运行全文查询,该查询可以使用通配符来满足部分匹配.
在搜索词后面有一个后缀通配符似乎很容易,但我无法弄清楚如何指定前缀通配符.
例如,我可以使用类似的东西轻松地执行后缀搜索.
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', 'don:*') )
Run Code Online (Sandbox Code Playgroud)
应该返回匹配"伦敦"的结果
但是,我似乎不能像...那样做前缀搜索
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don') )
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望在搜索词的前端和末尾添加一个通配符,例如......
SELECT "t1".*
FROM "t1"
WHERE (to_tsvector('simple', "t1"."city") @@ to_tsquery('simple', ':*don:*') )
Run Code Online (Sandbox Code Playgroud)
我可以使用LIKE条件但是我希望能从Postgres中的全文搜索功能中受益.
Tom*_*zky 13
全文搜索有助于查找单词,而不是子字符串.
对于子字符串搜索,您最好使用PostgreSQL 9.1和/ 或索引like '%don%'
提供的pg_trgm
扩展.但是你的索引会非常大(甚至比你的表大几倍)并且写入性能不是很好.using gin (column_name gin_trgm_ops)
using gist (column_name gist_trgm_ops)
有一个很好的例子,在select*from depesz博客上使用pg_trgm进行子字符串搜索.
一种狂野而疯狂的做法是创建所有文档的tsvector索引,反之亦然.并反转您对后缀搜索的查询.
这基本上是Solr用其ReversedWildcardFilterFactory做的事情
select
reverse('brown fox')::tsvector @@ (reverse('rown') || ':*')::tsquery --true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12527 次 |
最近记录: |