Ahmet Erkan ÇELİK
Ahmet Erkan ÇELİK

Reputation: 2442

Why Postgresql ts_query remove last char?

I've run following 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

And I've received following result:

enter image description here

I've search a text as 'idis' but ts_query remove 's' char and search 'idi'. Results ordered by rank and rank of idil greather than idis.

Why ts_query removed last char? How can I fix this problem?

Upvotes: 1

Views: 215

Answers (1)

Laurenz Albe
Laurenz Albe

Reputation: 247300

You shoul set your default text search configuration to a language where the stemming rules are as you expect them to be:

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)

Upvotes: 2

Related Questions