22

渡された文字列内の特殊文字をどのようにエスケープします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

4

3 に答える 3

8

簡単な解決策は、次のようにtsqueryを作成することです。

select $$'AT&T'$$::tsquery;

より複雑なクエリを作成できます。

select $$'AT&T' & Phone | '|Bang!'$$::tsquery;

詳細については、テキスト検索ドキュメントを参照してください。

于 2016-02-27T11:32:22.683 に答える
5

このコメントは、plainto_tsquery('AT&T)関数https://stackoverflow.com/a/16020565/350195を使用すると非常に便利です。

于 2017-01-23T11:10:22.670 に答える
3

'AT&T'を検索ワードとして扱いたい場合は、デフォルトのパーサーが2つのワードとして分割するため、カスタマイズされたコンポーネントが必要になります。

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/Configure-Text-Search-parser-td2846645.html

于 2012-12-31T16:51:15.763 に答える