我正在尝试构建Postgresql文本搜索配置,将ISO日期(如“2015-02-19”)视为单个令牌。所有默认配置都包括int和uint解析器,它们会将日期分成几个子字符。
development=# SELECT * FROM ts_debug('english', '2371-05-01');
alias | description | token | dictionaries | dictionary | lexemes
-------+------------------+-------+--------------+------------+---------
uint | Unsigned integer | 2371 | {simple} | simple | {2371}
int | Signed integer | -05 | {simple} | simple | {-05}
int | Signed integer | -01 | {simple} | simple | {-01}
使用Postgres documentation on customizing text search configurations和docs on the available parser token types you can include in a config,我做了一个看起来应该有用的配置:
development=# \dF+ iso_dates
Text search configuration "public.iso_dates"
Parser: "pg_catalog.default"
Token | Dictionaries
----------+--------------
numhword | simple
numword | simple
但是,当我尝试使用配置时,它仍然会解析int和uint标记。
development=# SELECT * FROM ts_debug('public.iso_dates', '2371-05-01');
alias | description | token | dictionaries | dictionary | lexemes
-------+------------------+-------+--------------+------------+---------
uint | Unsigned integer | 2371 | {} | |
int | Signed integer | -05 | {} | |
int | Signed integer | -01 | {} | |
发生了什么事? Postgres是否需要其他命令才能兑现我的更改?我重新启动了数据库服务器,但不知道还有什么可以尝试。
答案 0 :(得分:0)
在您的情况下,您可以看到您的查询要使用unsigned和int配置,但您的自定义配置iso_dates
仅设置为numword
和numhword
。以下内容可能会为您提供所需的信息。
ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR numword, numhword, int, uint WITH iso_dates;