如何让Postgresql反映对文本搜索配置所做的更改?

时间:2015-02-19 20:40:16

标签: postgresql full-text-search

我正在尝试构建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 configurationsdocs 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是否需要其他命令才能兑现我的更改?我重新启动了数据库服务器,但不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

在您的情况下,您可以看到您的查询要使用unsigned和int配置,但您的自定义配置iso_dates仅设置为numwordnumhword。以下内容可能会为您提供所需的信息。

ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR numword, numhword, int, uint WITH iso_dates;