问题的核心是解析器将解析pro-physik.de
为主机名:
SELECT alias, token FROM ts_debug('simple', 'pro-physik.de');
alias | token
-------+---------------
host | pro-physik.de
(1 row)
比较一下:
SELECT alias, token FROM ts_debug('simple', 'pro-physik-de');
alias | token
-----------------+---------------
asciihword | pro-physik-de
hword_asciipart | pro
blank | -
hword_asciipart | physik
blank | -
hword_asciipart | de
(6 rows)
现在pro-physik
和pro-p
不是主机名,所以你得到
SELECT to_tsquery('simple', 'pro-physik:*');
to_tsquery
---------------------------------------
'pro-physik':* & 'pro':* & 'physik':*
(1 row)
SELECT to_tsquery('simple', 'pro-p:*');
to_tsquery
-----------------------------
'pro-p':* & 'pro':* & 'p':*
(1 row)
第一个tsquery
将不匹配,因为physik
不是 的前缀pro-physik.de
,第二个将匹配,因为,pro-p
所有三个都是前缀。pre
p
作为一种解决方法,使用这样的全文搜索:
select
to_tsvector('simple', replace('pro-physik.de', '.', ' ')) @@
to_tsquery('simple', replace('pro-physik:*', '.', ' '))