文字搜尋剖析器負責將原始文件文字分割成符記(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ó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 |
小數記號表示法 | -1.234 |
int |
帶正負號的整數 | -1234 |
uint |
不帶正負號的整數 | 1234 |
version |
版本號碼 | 8.3.0 |
tag |
XML 標籤 | <a href="dictionaries.html"> |
entity |
XML 實體 | & |
blank |
空格符號 | (任何未被識別為其他類型的空白或標點符號) |
剖析器對於「字母」的概念取決於資料庫的 locale 設定,特別是 lc_ctype
。 僅包含基本 ASCII 字母的單字會被報告為單獨的符記類型,因為有時區分它們是有用的。 在大多數歐洲語言中,符記類型 word
和 asciiword
應被視為相同。
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
如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。