您如何对传递给的字符串中的特殊字符进行分隔to_tsquery
?例如,这种查询:
select to_tsquery('AT&T');
产生:
NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored
to_tsquery
------------
(1 row)
编辑:我还注意到to_tsvector
.
您如何对传递给的字符串中的特殊字符进行分隔to_tsquery
?例如,这种查询:
select to_tsquery('AT&T');
产生:
NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored
to_tsquery
------------
(1 row)
编辑:我还注意到to_tsvector
.
一个简单的解决方案是按如下方式创建 tsquery:
select $$'AT&T'$$::tsquery;
您可以进行更复杂的查询:
select $$'AT&T' & Phone | '|Bang!'$$::tsquery;
有关更多信息,请参阅文本搜索文档。
我发现这个评论非常有用,它使用了plainto_tsquery('AT&T)
函数https://stackoverflow.com/a/16020565/350195
如果您希望将“AT&T”视为搜索词,则需要一些自定义组件,因为默认解析器将其拆分为两个词:
steve@steve@[local] =# select * from ts_parse('default', 'AT&T');
tokid | token
-------+-------
1 | AT
12 | &
1 | T
(3 rows)
steve@steve@[local] =# select * from ts_debug('simple', 'AT&T');
alias | description | token | dictionaries | dictionary | lexemes
-----------+-----------------+-------+--------------+------------+---------
asciiword | Word, all ASCII | AT | {simple} | simple | {at}
blank | Space symbols | & | {} | |
asciiword | Word, all ASCII | T | {simple} | simple | {t}
(3 rows)
正如您从CREATE TEXT PARSER 的文档中看到的那样,这不是很简单,因为解析器似乎需要是一个 C 函数。
您可能会发现有人将“underscore_word”识别为单个标记的帖子很有用:http: //postgresql.1045698.n5.nabble.com/Configuring-Text-Search-parser-td2846645.html