双引号的postgresql全文搜索行为

时间:2017-09-22 06:54:25

标签: sql postgresql

我想要用双引号或单引号括起来的字符串要完全搜索,但在搜索查询中使用双引号时我会遇到不可预测的行为。

就像我在搜索这个时一样,

fusion=# select to_tsquery('simple','"data|" & "%center"');

    to_tsquery    
------------------
 'data' | 'center'  

但是,当我在搜索时,这个

fusion=# select to_tsquery('simple','"data\|" & "%center"');

 to_tsquery    
------------------
 'data' & 'center'

使用引号时,官方文档中没有关于行为的指南。

请提前解释,谢谢。

1 个答案:

答案 0 :(得分:1)

你可以通过几个步骤完成 - 首先对相应索引属性的词位有效fts,然后在结果do运算符LIKE上使用完全短语:

t=# select version();
                                                   version
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3.14 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9), 64-bit
(1 row)

t=# with t(v) as (values('the center of the data'),('the center of the database'),('data| %center'))
, filter as (select v,v@@ to_tsquery('simple','data & center') fts from t)
select *,v like '%data|%' and v like e'%\%center%' exact_words from filter;
             v              | fts | exact_words
----------------------------+-----+-------------
 the center of the data     | t   | f
 the center of the database | f   | f
 data| %center              | t   | t
(3 rows)

所以那就像:

t=# with t(v) as (values('the center of the data'),('the center of the database'),('data| %center'))
, filter as (select v,v@@ to_tsquery('simple','data & center') fts from t)
select v from filter where fts and v like '%data|%' and v like e'%\%center%';
       v
---------------
 data| %center
(1 row)