select to_tsvector('english_nostop', 'u,s') @@ to_tsquery('english_nostop', 'u<->s');
返回t
,而
select to_tsvector('english_nostop', 'u.s') @@ to_tsquery('english_nostop', 'u<->s');
返回f
用这个调试:
SELECT alias, token, lexemes FROM ts_debug('english_nostop', 'u.s');
alias | token | lexemes
-------+-------+---------
file | u.s | {u.s}
和
audiobook=> SELECT alias, token, lexemes FROM ts_debug('english_nostop', 'u,s');
alias | token | lexemes
-----------+-------+---------
asciiword | u | {u}
blank | , |
asciiword | s | {s}
怎样才能消除这种行为。做.
喜欢,
?别名file
似乎认为u.s
是特殊的。
这是我的配置:
CREATE TEXT SEARCH DICTIONARY english_stem_nostop (
Template = snowball
, Language = english
);
CREATE TEXT SEARCH CONFIGURATION public.english_nostop ( COPY = pg_catalog.english );
ALTER TEXT SEARCH CONFIGURATION public.english_nostop
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word WITH english_stem_nostop;
ALTER TEXT SEARCH CONFIGURATION public.english_nostop DROP MAPPING FOR asciihword, hword;
而且我们不能简单地删除file
,这将删除全部文本:
ALTER TEXT SEARCH CONFIGURATION public.english_nostop DROP MAPPING FOR file;
SELECT alias, token, lexemes FROM ts_debug('english_nostop', 'u.s');
alias | token | lexemes
-------+-------+---------
file | u.s |
这也是错误的。如果我们ALTER MAPPING for file
,我们得到
SELECT alias, token, lexemes FROM ts_debug('english_nostop', 'u.s');
alias | token | lexemes
-------+-------+---------
file | u.s | {u.}
仍然不是我的目的。
您必须制作自己的解析器。这并不容易。您还必须决定保留解析器的哪些功能以及丢弃哪些功能。我不清楚文件令牌类型是唯一会给您带来问题的类型。有一个测试模块“test_parser”可以作为创建自己的示例,但它太简单了,而默认的太复杂了。
更实用的解决方案可能是在将文本
replace(col_name,'.',' ')
传递给to_tsvector
. 如果您使用的是 plainto_tsquery 等,您还希望通过它传递查询,但由于您只是使用 to_tsquery,您不需要这样做。一个简单的答案可能是: