我得到了一个奇怪的结果,用tsquery搜索pro-physik.de
这样的表达式。
如果我通过tsquery请求pro-physik:*
,我希望获得所有以pro-physik
开头的条目。不幸的是,pro-physik.de
的条目丢失了。
以下是2个展示问题的示例:
查询1:
select
to_tsvector('simple', 'pro-physik.de') @@
to_tsquery('simple', 'pro-physik:*') = true
结果1:false
(应为true
)
查询2:
select
to_tsvector('simple', 'pro-physik.de') @@
to_tsquery('simple', 'pro-p:*') = true
结果2:true
有人知道如何解决这个问题吗?
答案 0 :(得分:2)
问题的核心是解析器将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
和{{ 1}}这三个都是前缀。
作为解决方法,请使用如下全文搜索:
p