テキスト検索パーサは、もとの文書テキストを分割してトークンに変換し、それぞれのトークンの型を識別する役割を持っています。ここで、可能な型の集合は、パーサ自身が定義します。 パーサは文書をまったく変更しないことに注意してください — それは、単に可能な単語の境界を識別するだけです。 このような制限があるため、カスタム辞書を作るのに比べ、用途限定のカスタムパーサを作る必要性は少ないです。 今のところ、PostgreSQLはたった一つの組み込みパーサを提供しています。これは広い範囲の用途に対して有用であると考えられています。
組み込みのパーサはpg_catalog.default
というものです。
表 12.1に示す23のトークンを理解します。
表12.1 デフォルトパーサのトークン型
別名 | 説明 | 例 |
---|---|---|
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 |
email | 電子メールアドレス | 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
は、同じように扱われます。
email
はRFC 5322で定義された有効なメールアドレス文字をすべてサポートしている訳ではありません。
特に、メールアドレスのユーザ名としてサポートされる英数字以外の文字はピリオド、ダッシュ、アンダースコアのみです。
パーサがテキストの同じ部分から重複したトークンを生成することはあり得ます。たとえば、ハイフン付の単語は、単語全体と、各部分の両方を報告します。例を示します。
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