パーサ

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 12章全文検索 | 早送り | 次のページ

# 12.5. パーサ

テキスト検索パーサは、もとの文書テキストを分割してトークンに変換し、それぞれのトークンの型を識別子する役割を持っています。ここで、可能な型の集合は、パーサ自身が定義します。パーサは文書をまったく変更しないことに注意してください — それは、単に可能な単語の境界を識別するだけです。このような制限があるため、カスタム辞書を作るのに比べ、用途限定のカスタムパーサを作る必要性は少ないです。今のところ、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`
`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エンティティ | `&amp;`
`blank` | 空白記号 | (他のものに解釈できない空白または句読点)

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

> `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

前のページ | ホーム | 次のページ
追加機能 | 上に戻る | 辞書