PostgreSQL全文搜索产生奇怪的结果

PostgreSQL全文搜索产生奇怪的结果,postgresql,full-text-search,finnish,Postgresql,Full Text Search,Finnish,我有这样一个模式(简化): 但我的查询结果完全无效: # select name from users where to_tsvector('finnish', name) @@ to_tsquery('lemmin'); name ------ (0 rows) # select name from users where to_tsvector('finnish', name) @@ to_tsquery('lemmink'); name

我有这样一个模式(简化):

但我的查询结果完全无效:

# select name from users where to_tsvector('finnish', name) @@ to_tsquery('lemmin');
 name 
------
(0 rows)

# select name from users where to_tsvector('finnish', name) @@ to_tsquery('lemmink');
       name                                       
--------------------
 Riitta ja Lemminki
 Riitta ja Lemminki
(2 rows)

# select name from users where name ilike 'lemmink%';
       name                  
----------------------
 Lemminkäinen Matilda
 Lemminkäinen Matias
 Lemminkäinen Kyösti
 Lemminkäinen Tuomas
(4 rows)
另一个例子:

# select name from users where to_tsvector('finnish', name) @@ to_tsquery('partu');
   name             
----------
 Partuuna
(1 row)

# select name from users where to_tsvector('finnish', name) @@ to_tsquery('partur');
         name                                    
------------------------
 Parturi-Kampaamo Raija
 Parturi-Kampaamo Siema
(2 rows)
我希望在两个查询中都能得到最后两个结果

使用以下版本:

psql (9.4.6, server 9.5.2)
WARNING: psql major version 9.4, server major version 9.5.
         Some psql features might not work.

我不会说芬兰语,但这似乎是预期的结果。FTS查找词素,而不是单词的一部分,例如,
do
不是
dog
的词素,但
dog
dog

t=# select  to_tsvector('english', 'Dogs eats bone') @@ to_tsquery('do');
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
 ?column?
----------
 f
(1 row)

t=# select  to_tsvector('english', 'Dogs eats bone') @@ to_tsquery('dog');
 ?column?
----------
 t
(1 row)
所以我相信,
Parturi
last
I
是可选的结尾-对吗

更新: 发件人:
partur[i],partur[eita]=>词素将是partur

Darn,是否有任何类似的方法适用于单词的某些部分?:/还有,你所说的可选结尾是什么意思
parturi
因为它是一个基本单词,所以它的字面意思是“理发师”。这就像搜索“hairdressee”而不是在其中找到带有“hairdresser”的名字。你可以使用like运算符或正则表达式来查找单词的某些部分。谢谢,我想这回答了我的问题。我只需要想出一些其他的方法,如果
芬兰语
不是您默认的FTS配置,您应该将
芬兰语
(如果您想使用它)作为
to_tsvector()
to_tsquery()
的第一个参数我不知道当查询的标记与向量(文档)不同时会发生什么,但我认为这种设置不会带来什么好处。此外,对于纯前缀匹配(其中
lemmin
lemmink
不是一个完整的词干),也应该使用
来查询('finish',lemmin:')
(再次:))人名的词干并不是FTS的强项之一。@pozs嘿,对不起,我忘了回答,使用
lemmin:
在我的所有场景中都非常有效。如果你想发布一个竞争性的答案,请随时发布。
t=# select  to_tsvector('english', 'Dogs eats bone') @@ to_tsquery('do');
NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
 ?column?
----------
 f
(1 row)

t=# select  to_tsvector('english', 'Dogs eats bone') @@ to_tsquery('dog');
 ?column?
----------
 t
(1 row)