他のバージョンの文書9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

12.5. パーサ

テキスト検索パーサは、もとの文書テキストを分割してトークンに変換し、それぞれのトークンの型を識別子する役割を持っています。ここで、可能な型の集合は、パーサ自身が定義します。パーサは文書をまったく変更しないことに注意してください — それは、単に可能な単語の境界を識別するだけです。このような制限があるため、カスタム辞書を作るのに比べ、用途限定のカスタムパーサを作る必要性は少ないです。今のところ、PostgreSQLはたった一つの組み込みパーサを提供しています。これは広い範囲の用途に対して有用であると考えられています。

組み込みのパーサはpg_catalog.defaultというものです。表12-1に示す23のトークンを理解します。

表 12-1. Default Parser's Token Types

別名説明
asciiword単語、すべてのASCII文字elephant
word単語、すべての文字mañana
numword単語、文字、数字beta1
asciihwordハイフンでつながれた単語、すべてのASCIIup-to-date
hwordハイフンでつながれた単語、すべての文字lógico-matemática
numhwordハイフンでつながれた単語、すべての文字、数字postgresql-beta1
hword_asciipartハイフンでつながれた単語の一部、すべての ASCIIpostgresql-beta1postgresql
hword_partハイフンでつながれた単語の一部、すべての文字lógico-matemáticalógicoまたはmatemática
hword_numpartハイフンでつながれた単語の文字+数字の部分postgresql-beta1beta1
email電子メールアドレスfoo@example.com
protocolプロトコルヘッダーhttp://
urlURLexample.com/stuff/index.html
hostホスト名example.com
url_pathURL中のパス名URL中の/stuff/index.html
fileファイルまたはパス名URL中でない/usr/local/foo.txt
sfloat科学技術表記-1.234e56
float10進表記-1.234
int符号付き整数-1234
uint符号なし整数1234
versionバージョン番号8.3.0
tagXMLタグ<a href="dictionaries.html">
entityXMLエンティティ&amp;
blank空白記号(他のものに解釈できない空白または句読点)

注意: パーサにとっての"文字"は、データベースのロケールの設定、特にlc_ctypeによって決まります。基本的なASCIIのみを含む単語は、別のトークン型として報告されます。ときには、それらを他と区別することが有用だからです。ヨーロッパのたいていの言語では、wordasciiwordは、同じように扱われます。

emailはRFC5322で定義されたすべての有効なメールアドレス文字をサポートしません。メールアドレスのユーザ名としてサポートされる英数字以外の文字はピリオド、ダッシュ、アンダースコアのみです。

パーサがテキストの同じ部分から重複したトークンを生成することはあり得ます。たとえば、ハイフン付の単語は、単語全体と、各部分の両方を報告します。例を示します。

SELECT alias, description, token FROM ts_debug('foo-bar-beta1');
      alias      |               description                |     token     
-----------------+------------------------------------------+---------------
 numhword        | Hyphenated word, letters and digits      | foo-bar-beta1
 hword_asciipart | Hyphenated word part, all ASCII          | foo
 blank           | Space symbols                            | -
 hword_asciipart | Hyphenated word part, all ASCII          | bar
 blank           | Space symbols                            | -
 hword_numpart   | Hyphenated word part, letters and digits | beta1

この挙動は好ましいのものです。単語全体と、各々の部分の両方に対して検索ができるからです。初歩的な別の例を示します。

SELECT alias, description, token FROM ts_debug('http://example.com/stuff/index.html');
  alias   |  description  |            token             
----------+---------------+------------------------------
 protocol | Protocol head | http://
 url      | URL           | example.com/stuff/index.html
 host     | Host          | example.com
 url_path | URL path      | /stuff/index.html