2017-06-09 50 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) 
相關問題