首页 > 解决方案 > 如何将 ts_query 与 ANY(anyarray)一起使用

问题描述

我目前在 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)

标签: postgresqlfull-text-search

解决方案


这应该是直截了当的:

WHERE tokens @@ ANY
   (ARRAY[
      plainto_tsquery('tomato'),
      plainto_tsquery('celery'),
      plainto_tsquery('vodka')
   ])

推荐阅读