2017-06-09 3 views
0

J'ai couru la requête suivante:Pourquoi Postgresql ts_query supprime le dernier caractère?

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 

et je l'ai reçu le résultat suivant:

enter image description here

J'ai la recherche d'un texte comme 'IDIS' mais char 's' ts_query remove et recherchez 'idi'. Résultats classés par rang et rang d'idil plus grand que idis. Pourquoi ts_query a-t-il supprimé le dernier caractère? Comment puis-je résoudre ce problème?

+2

ce qui est 'idis'? Je pense que cela normalise à idi penser idis est pluriel pour idi –

+0

J'ai reçu un autre résultat similaire. le numéro de résultat de 'ece kalibrasy' en tant que 0 mais le résultat de 'ece kalibrasyo' en tant que 1 –

Répondre

1

Vous shoul définir la configuration de votre recherche de texte par défaut à une langue où les règles sont issues que vous attendez à être:

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)