2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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. 解析器 #

文字搜尋解析器負責將原始文件文字拆分為詞元,並識別每個詞元的型別,其中可能的型別集由解析器本身定義。請注意,解析器根本不會修改文字——它只是識別可行的單詞邊界。由於這種有限的範圍,對應用程式特定的自定義解析器的需求遠小於對自定義詞典的需求。目前 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 postgresqlpostgresql-beta1 的上下文中
hword_part 帶連字元的單詞部分,所有字母 lógicomatemáticalógico-matemática 的上下文中
hword_numpart 帶連字元的單詞部分,字母和數字 beta1postgresql-beta1 的上下文中
email 電子郵件地址 foo@example.com
protocol 協議頭 http://
url URL example.com/stuff/index.html
host 主機 example.com
url_path URL 路徑 /stuff/index.html,在 URL 的上下文中
file 檔案或路徑名 /usr/local/foo.txt,如果不在 URL 中
sfloat 科學記數法 -1.234e56
float 十進位制記數法 -1.234
int 帶符號整數 -1234
uint 無符號整數 1234
version 版本號 8.3.0
tag XML 標籤 <a href="dictionaries.html">
entity XML 實體 &amp;
blank 空格符號 (任何其他未識別的空格或標點符號)

注意

解析器對字母的概念由資料庫的區域設定確定,特別是 lc_ctype。只包含基本 ASCII 字母的單詞被報告為單獨的詞元型別,因為有時區分它們很有用。在大多數歐洲語言中,wordasciiword 詞元型別應被視為相同。

email 不支援 RFC 5322 定義的所有有效電子郵件字元。具體來說,電子郵件使用者名稱支援的唯一非字母數字字元是句點、連字元和下劃線。

tag 不支援 W3C 推薦 XML 定義的所有有效標籤名。具體來說,支援的標籤名是那些以 ASCII 字母、下劃線或冒號開頭,並且只包含字母、數字、連字元、下劃線、句點和冒號的標籤名。tag 還包括以 <!-- 開頭和以 --> 結尾的 XML 註釋,以及 XML 宣告 (但請注意,這包括以 <?x 開頭和以 > 結尾的任何內容)。

解析器有可能從同一段文字生成重疊的詞元。例如,一個帶連字元的單詞將同時被報告為整個單詞和每個組成部分

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

提交更正

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