Как использовать ts_query с ЛЮБОЙ (anyarray) - PullRequest
0 голосов
/ 31 января 2019

У меня сейчас есть запрос в PostgreSQL, например:

SELECT
    name
FROM
    ingredients
WHERE
    name = ANY({"string value",tomato,other})

Моя таблица ингредиентов - это просто список имен:

   name
----------
 jalapeno
 tomatoes
 avocados
 lime

Моя проблема в том, что множественные значения в массиве будутне совпадают отдельные значения в запросе.Чтобы решить эту проблему, я создал столбец tsvector в таблице:

     name      |    tokens  
---------------+--------------
jalapeno       | 'jalapeno':1
tomatoes       | 'tomato':1
avocados       | 'avocado':1
lime           | 'lime':1

Я могу правильно запрашивать отдельные значения из таблицы, например:

SELECT
    name,
    ts_rank_cd(tokens, plainto_tsquery('tomato'), 16) AS rank
FROM
    ingredients
WHERE
    tokens @@ plainto_tsquery('tomato')
ORDER BY
    rank DESC;

Однако,Мне нужно запросить значения из всего массива.Массив создается из другой функции, поэтому я могу контролировать тип каждого элемента массива.

Как использовать операнд @@ с ANY(anyarray)?

1 Ответ

0 голосов
/ 31 января 2019

Это должно быть прямо:

WHERE tokens @@ ANY
   (ARRAY[
      plainto_tsquery('tomato'),
      plainto_tsquery('celery'),
      plainto_tsquery('vodka')
   ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...