テキスト検索パーサは、もとの文書テキストを分割してトークンに変換し、それぞれのトークンの型を識別子する役割を持っています。ここで、可能な型の集合は、パーサ自身が定義します。パーサは文書をまったく変更しないことに注意してください — それは、単に可能な単語の境界を識別するだけです。このような制限があるため、カスタム辞書を作るのに比べ、用途限定のカスタムパーサを作る必要性は少ないです。今のところ、PostgreSQLはたった一つの組み込みパーサを提供しています。これは広い範囲の用途に対して有用であると考えられています。
組み込みのパーサはpg_catalog.defaultというもので、23のトークンを理解します。
表 12-1. Default Parser's Token Types
別名 | 説明 | 例 |
---|---|---|
asciiword | 単語、すべてのASCII文字 | elephant |
word | 単語、すべての文字 | mañana |
numword | 単語、文字、数字 | beta1 |
asciihword | ハイフンでつながれた単語、すべてのASCII | up-to-date |
hword | ハイフンでつながれた単語、すべての文字 | lógico-matemática |
numhword | ハイフンでつながれた単語、すべての文字、数字 | postgresql-beta1 |
hword_asciipart | ハイフンでつながれた単語の一部、すべての ASCII | postgresql-beta1のpostgresql |
hword_part | ハイフンでつながれた単語の一部、すべての文字 | lógico-matemáticaのlógicoまたはmatemática |
hword_numpart | ハイフンでつながれた単語の文字+数字の部分 | postgresql-beta1のbeta1 |
電子メールアドレス | foo@example.com | |
protocol | プロトコルヘッダー | http:// |
url | URL | example.com/stuff/index.html |
host | ホスト名 | example.com |
url_path | URL中のパス名 | URL中の/stuff/index.html |
file | ファイルまたはパス名 | URL中でない/usr/local/foo.txt |
sfloat | 科学技術表記 | -1.234e56 |
float | 10進表記 | -1.234 |
int | 符合付き整数 | -1234 |
uint | 符合なし整数 | 1234 |
version | バージョン番号 | 8.3.0 |
tag | XMLタグ | <a href="dictionaries.html"> |
entity | XMLエンティティ | & |
blank | 空白記号 | (他のものに解釈できない空白または句読点) |
注意: パーサにとっての"文字"は、サーバのロケールの設定、特にlc_ctypeによって決まります。基本的なASCIIのみを含む単語は、別のトークン型として報告されます。ときには、それらを他と区別することが有用だからです。ヨーロッパのたいていの言語では、word と asciiwordは、同じように扱われます。
パーサがテキストの同じ部分から重複したトークンを生成することはあり得ます。たとえば、ハイフン付の単語は、単語全体と、各部分の両方を報告します。例を示します。
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