2017-06-09 49 views
0

我已经运行下面的查询:为什么Postgresql ts_query删除最后一个字符?

SELECT 
    * 
FROM 
    (
     SELECT 
      ts_rank(document, to_tsquery('idis:*')) AS qrank, 
      public.tbl_company.company_name as name, 
      public.tbl_company.document as vector, 
      to_tsquery('idis:*') as query 
     FROM 
      public.tbl_company 
     WHERE 
      public.tbl_company.document @@to_tsquery('idis:*') 
    UNION 
     SELECT 
      ts_rank(document, to_tsquery('idis:*')) AS qrank, 
      public.tbl_person.full_name as name, 
      public.tbl_person.document as vector, 
      to_tsquery('idis:*') as query 
     FROM 
      public.tbl_person 
     WHERE 
      public.tbl_person.document @@to_tsquery('idis:*') 
    )as customers 
    ORDER BY qrank DESC 

而下面的结果我已经收到了:

enter image description here

我搜索了一个文本为 'IDIS',但ts_query删除 's' 字符并搜索'idi'。结果按idil大于idis的排名和排名排序。

为什么ts_query删除最后一个字符? 我该如何解决这个问题?

+2

什么'idis'?我认为它正常化为idi认为idis是idi的复数 –

+0

我收到了另一个类似的结果。 'ece kalibrasy'的结果编号为0,但'ece kalibrasyo'的结果编号为1 –

回答

1

你建议立即进行删除设置为语言默认的文本搜索配置,其中所产生的规则是按照您的预期是:

SET default_text_search_config='english'; 

SELECT to_tsvector('İdil') @@ to_tsquery('idis:*'); 
┌──────────┐ 
│ ?column? │ 
├──────────┤ 
│ t  │ 
└──────────┘ 
(1 row) 

SET default_text_search_config='turkish'; 

SELECT to_tsvector('İdil') @@ to_tsquery('idis:*'); 
┌──────────┐ 
│ ?column? │ 
├──────────┤ 
│ f  │ 
└──────────┘ 
(1 row) 
相关问题