文字搜尋解析器負責將原始文件文字拆分為詞元,並識別每個詞元的型別,其中可能的型別集由解析器本身定義。請注意,解析器根本不會修改文字——它只是識別可行的單詞邊界。由於這種有限的範圍,對應用程式特定的自定義解析器的需求遠小於對自定義詞典的需求。目前 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 在 postgresql-beta1 的上下文中 |
hword_part |
帶連字元的單詞部分,所有字母 | lógico 或 matemática 在 lógico-matemática 的上下文中 |
hword_numpart |
帶連字元的單詞部分,字母和數字 | beta1 在 postgresql-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 實體 | & |
blank |
空格符號 | (任何其他未識別的空格或標點符號) |
解析器對“字母”的概念由資料庫的區域設定確定,特別是 lc_ctype
。只包含基本 ASCII 字母的單詞被報告為單獨的詞元型別,因為有時區分它們很有用。在大多數歐洲語言中,word
和 asciiword
詞元型別應被視為相同。
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
如果您在文件中看到任何不正確、與您在該特定功能上的體驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。