在tsquery中转义连字符(postgresql)

5

我需要根据以下格式的字符串创建一个基于tsquery的查询:

something-smth-somthing-etc-etc

调用 to_tsquery('something-smth-somthing-etc-etc') 返回:

'something-smth-somthing-etc-etc' & 'someth' & 'smth' & 'somth' & 'etc' & 'etc'

显然,该字符串经历了分词、词干等处理。但在我们的情况下,我们正在进行全文搜索的列已经包含了tsvector,其中包含一个单一的词元:'something-smth-somthing-etc-etc'
查询select * from sometable where searchee @@ to_tsquery('something-smth-somthing-etc-etc')没有返回结果。
我应如何调用to_tsquery,以便它不会分析提供的字符串并创建单个词元查询?
或者,我错过了更重要的内容吗?
1个回答

5
假设您有一个具有所提到的值的tsvector,未经处理,而只是作为tsvector类型插入:
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

谢谢!像魔法一样有效。 - Aryéh Radlé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接