支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

12.5. 剖析器 #

文字搜尋剖析器負責將原始文件文字分割成符記(tokens),並識別每個符記的類型,其中可能的類型集合由剖析器本身定義。請注意,剖析器根本不會修改文字——它只是識別合理的單字邊界。由於這種有限的範圍,對於應用程式特定的自訂剖析器的需求,不如自訂字典那麼高。目前,PostgreSQL僅提供一個內建剖析器,它已被發現可用於廣泛的應用程式。

內建剖析器名為pg_catalog.default。它識別 23 種符記類型,如表 12.1所示。

表 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ógicomatemá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 小數記號表示法 -1.234
int 帶正負號的整數 -1234
uint 不帶正負號的整數 1234
version 版本號碼 8.3.0
tag XML 標籤 <a href="dictionaries.html">
entity XML 實體 &amp;
blank 空格符號 (任何未被識別為其他類型的空白或標點符號)

注意

剖析器對於字母的概念取決於資料庫的 locale 設定,特別是 lc_ctype。 僅包含基本 ASCII 字母的單字會被報告為單獨的符記類型,因為有時區分它們是有用的。 在大多數歐洲語言中,符記類型 wordasciiword 應被視為相同。

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

提交更正

如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。