Полнотекстовый поиск, соответствующий определенной позиции в предложении - PullRequest
1 голос
/ 15 октября 2019
SELECT 'Three little birds are sitting on a tree'::tsvector @@ to_tsquery('simple','birds');

Могу ли я изменить в запросе способ определения конкретной позиции в предложении, которому должен соответствовать искомый термин?

В этом примере «птички» находятся на третьей позициипредложение, чтобы я мог изменить ограничение таким образом, чтобы оно возвращало истину, только если совпадение найдено в заданной позиции, например

to_tsquery2('simple','birds',3) // => true

, а

to_tsquery2('simple','birds',5)  // => false

1 Ответ

1 голос
/ 15 октября 2019

В полнотекстовом поиске PostgreSQL нет условий для этого.

Но вы можете добавить «маркер» к тексту и злоупотреблять поиском по фразе:

SELECT to_tsvector('simple',
                   'quagga '
                      || 'Three little birds are sitting on a tree'
       )
    @@ to_tsquery('simple',
                  'quagga <3> ' || 'birds'
       );

 ?column? 
----------
 t
(1 row)

Фраза a <3> b соответствует предложению, содержащему a и b с двумя работами между ними.

Вам придется использовать quagga, который не встречается нигде в вашем тексте.

...