我想要用双引号或单引号括起来的字符串要完全搜索,但在搜索查询中使用双引号时我会遇到不可预测的行为。
就像我在搜索这个时一样,
fusion=# select to_tsquery('simple','"data|" & "%center"');
to_tsquery
------------------
'data' | 'center'
但是,当我在搜索时,这个
fusion=# select to_tsquery('simple','"data\|" & "%center"');
to_tsquery
------------------
'data' & 'center'
使用引号时,官方文档中没有关于行为的指南。
请提前解释,谢谢。
答案 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)