我需要根据以下格式的字符串创建一个tsquery:
something-smth-somthing-etc-etc
致电to_tsquery('something-smth-somthing-etc-etc')
返回:
'something-smth-somthing-etc-etc' & 'someth' & 'smth' & 'somth' & 'etc' & 'etc'
显然,字符串经过标记化,词干化等。
但在我们的例子中,我们制作FTS的列已经包含了tsvector,它包含一个单词lexeme:'something-smth-somthing-etc-etc'
。
查询
select * from sometable where searchee @@ to_tsquery('something-smth-somthing-etc-etc')
不会返回任何结果。
如何调用to_tsquery
,以便它不会分析提供的字符串并创建单个lexeme查询?
或者我错过了一些更重要的东西?
答案 0 :(得分:3)
总结你有tsvector提到的值,它没有被处理,但只是作为tsvecor类型插入:
t=# select to_tsvector('something-smth-somthing-etc-etc'), 'something-smth-somthing-etc-etc'::tsvector;
to_tsvector | tsvector
-----------------------------------------------------------------------------------+-----------------------------------
'etc':5,6 'smth':3 'something':2 'something-smth-somthing-etc-etc':1 'somthing':4 | 'something-smth-somthing-etc-etc'
(1 row)
确实你会错的:
t=# select 'something-smth-somthing-etc-etc'::tsvector @@ to_tsquery('something-smth-somthing-etc-etc');
?column?
----------
f
要破解它你也可以跳过对tsquery的处理:
t=# select 'something-smth-somthing-etc-etc'::tsvector @@ 'something-smth-somthing-etc-etc'::tsquery;
?column?
----------
t