У меня есть следующая таблица:
postgres=# \d so_rum;
Table "public.so_rum"
Column | Type | Collation | Nullable | Default
-----------+-------------------------+-----------+----------+---------
id | integer | | |
title | character varying(1000) | | |
posts | text | | |
body | tsvector | | |
parent_id | integer | | |
Indexes:
"so_rum_body_idx" rum (body)
Я хотел выполнить фразовый поисковый запрос, поэтому я придумал следующий запрос, например:
select id from so_rum
where body @@ phraseto_tsquery('english','Is it possible to toggle the visibility');
Это дает мне результаты, которые соответствуют только всему тексту. Однако есть документы, в которых расстояние между лексмами больше, и приведенный выше запрос не возвращает мне эти данные. Например: 'it is something possible to do toggle between the. . . visibility'
не возвращается. Я знаю, что могу вернуть его с помощью оператора расстояния <2>
(например), указав to_tsquery
вручную.
Но я хотел понять, как это сделать в самом моем операторе sql , так что сначала я получаю результаты с расстоянием 1
, затем 2
и так далее (может быть до 6-7
). Наконец, добавьте результаты с фактическим количеством поисковых слов, как в следующем запросе:
select count(id) from so_rum
where body @@ to_tsquery('english','string & string . . . ')
Можно ли сделать один запрос с хорошей производительностью?