eal*_*ent 13 postgresql full-text-search
假设您有一个postgres 8.3表,如下所示:
CREATE TABLE t1 (body text, body_vector tsvector);
我希望能够使用全文索引(Give,GiN或tsvector列上的两者)搜索短语.我能找到的最好的解决方法是首先对两个单词进行全文搜索(布尔AND),然后在短语的主体上进行相似的比较.当然,这无法捕获postgres的全文搜索为您做的任何词干或拼写检查.这方面的一个例子是,如果我正在搜索短语'w1 w2',我会使用:
SELECT * FROM t1 WHERE body_vector @@ 'w1 & w2'::tsquery AND body LIKE 'w1 w2';
有没有办法在不必求助于搜索文本列的情况下执行此操作?
Mag*_*der 12
如果你想要精确的词组匹配,那就是这样做的方法.您也可以尝试WHERE body_vector @@ plainto_tsquery('w1 w2'),然后按排名进行排序.(关键是单词彼此相邻的命中应该最终位于顶部)
更新:PostgreSQL 9.6文本搜索支持短语
select
*
from (values
('i heart new york'),
('i hate york new')
) docs(body)
where
to_tsvector(body) @@ phraseto_tsquery('new york')
(1 row retrieved)
Run Code Online (Sandbox Code Playgroud)
或者单词之间的距离:
-- a distance of exactly 2 "hops" between "quick" and "fox"
select
*
from (values
('the quick brown fox'),
('quick brown cute fox')
) docs(body)
where
to_tsvector(body) @@ to_tsquery('quick <2> fox')
(1 row retrieved)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7077 次 |
最近记录: |