1

私はこのテキストを持っています(連結されたフィールド行から取得)

Astronomic Event 2013/1434H - Aceh ....

2013または1434hキーワードで検索するにはどうすればよいですか?

以下のコードを試しましたが、行がありません。

to_tsvector結果:

'2013/1434h':8,12 'aceh':1 'bin.....

サンプルケース:

WITH sample_table as
  (SELECT to_tsvector('Astronomic Event 2013/1434H - Aceh') sample_content)

SELECT *
    FROM sample_table, to_tsquery('2013') q
WHERE sample_content @@ q
4

1 に答える 1

1

2013 または 1434h のキーワードで検索するにはどうすればよいですか?

置き換えたいようです:

to_tsquery('1434h') q

と:

to_tsquery('1434h | 2013') q

http://www.postgresql.org/docs/current/static/functions-textsearch.html

補足:to_tsquery()構文は非常に気まぐれです。空想は許されませんし、Postgres の仮定の多くはエンドユーザーにとって使いやすいものではありません。

plainto_tsquery()多くの場合、任意の量のガベージを投げることができるを使用した方がよいでしょう。したがって、クエリを発行する前に文字列を前処理することを検討してください。たとえば、文字列とOR元の部分を一緒に分割できます。

where sc.text_index @@ (plainto_tsquery('1434h') || plainto_tsquery('2013'))

そうすることで、コードが少し複雑になりますが'quick & brown & fox & jumps & lazy & dog'、プレーンな の代わりに入力する必要があることを (Google で慣れ親しんでいることに反して) ユーザーが理解する必要はありません'The quick brown fox jumps over the lazy dog'


編集:実際にサンプルクエリを試してみましたが、実際にパーサーの問題が発生しているようです:

# SELECT alias, description, token FROM ts_debug('Astronomic Event 2013/1434H - Aceh');
   alias   |    description    |   token    
-----------+-------------------+------------
 asciiword | Word, all ASCII   | Astronomic
 blank     | Space symbols     |  
 asciiword | Word, all ASCII   | Event
 blank     | Space symbols     |  
 file      | File or path name | 2013/1434H
 blank     | Space symbols     |  
 blank     | Space symbols     | - 
 asciiword | Word, all ASCII   | Aceh
(8 rows)

http://www.postgresql.org/docs/current/static/textsearch-parsers.html

アプリ固有のパーサーを作成 (または検索) して構成する必要があるようです。個人的にこれを行ったことがないので、私ができる最善のことは、Postgres がこれを許可し、サンプルが含まれていることを強調することです。

http://www.postgresql.org/docs/current/static/test-parser.html

または、tsvector に変換する前に、tsvector 関連のトリガーを変更して、たとえば\d{4}/\d+[a-zA-Z]最も適切と思われるものに一致させ、それに応じてスペースを追加します。ファイル名を保存する必要がない場合は、次のような単純な方法でうまくいく可能性があります。

SELECT alias, description, token
FROM ts_debug(replace('Astronomic Event 2013/1434H - Aceh', '/', ' / '));
于 2013-06-15T10:14:43.780 に答える