如何将 ts_query 与 ANY(anyarray) 一起使用
How to use ts_query with ANY(anyarray)
我目前在 PostgreSQL 中有一个查询,例如:
SELECT
name
FROM
ingredients
WHERE
name = ANY({"string value",tomato,other})
我的配料table只是一个简单的名字列表:
name
----------
jalapeno
tomatoes
avocados
lime
我的问题是数组中的复数值与查询中的单个值不匹配。为了解决这个问题,我在 table:
上创建了一个 tsvector
列
name | tokens
---------------+--------------
jalapeno | 'jalapeno':1
tomatoes | 'tomato':1
avocados | 'avocado':1
lime | 'lime':1
我可以像这样从 table 中正确查询单个值:
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)
一起使用?
这应该是直截了当的:
WHERE tokens @@ ANY
(ARRAY[
plainto_tsquery('tomato'),
plainto_tsquery('celery'),
plainto_tsquery('vodka')
])
我目前在 PostgreSQL 中有一个查询,例如:
SELECT
name
FROM
ingredients
WHERE
name = ANY({"string value",tomato,other})
我的配料table只是一个简单的名字列表:
name
----------
jalapeno
tomatoes
avocados
lime
我的问题是数组中的复数值与查询中的单个值不匹配。为了解决这个问题,我在 table:
上创建了一个tsvector
列
name | tokens
---------------+--------------
jalapeno | 'jalapeno':1
tomatoes | 'tomato':1
avocados | 'avocado':1
lime | 'lime':1
我可以像这样从 table 中正确查询单个值:
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)
一起使用?
这应该是直截了当的:
WHERE tokens @@ ANY
(ARRAY[
plainto_tsquery('tomato'),
plainto_tsquery('celery'),
plainto_tsquery('vodka')
])