無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

12.5. パーサ

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


powered by SEO.CUG.NET