我在hstore列上生成相当复杂的全文搜索,例如:
SELECT "users".*
FROM "users"
WHERE (
TO_TSVECTOR('german', description -> 'de') @@ PLAINTO_TSQUERY('german', 'foobar') OR
TO_TSVECTOR('french', description -> 'fr') @@ PLAINTO_TSQUERY('french', 'foobar') OR
TO_TSVECTOR('english', description -> 'en') @@ PLAINTO_TSQUERY('english', 'foobar')
)
由于应用层的限制,我不能把上面的SQL放在一起。我所能做的就是构建一个如下所示的查询:
WHERE [whatever] [predicate] 'foobar'
使用=
谓词说:
WHERE [whatever] = 'foobar'
现在,我很确定不可能以我能在应用层处理的方式重写上面的复杂查询。但我很想在这里被证明是错误的。
感谢您的想法!
答案 0 :(得分:1)
WHERE
(TO_TSVECTOR('german', description -> 'de') @@
PLAINTO_TSQUERY('german', 'foobar')
)::int +
(TO_TSVECTOR('french', description -> 'fr') @@
PLAINTO_TSQUERY('french', 'foobar')
)::int +
(TO_TSVECTOR('english', description -> 'en') @@
PLAINTO_TSQUERY('english', 'foobar')
)::int
> '0'
布尔值到整数的强制转换为0或1.将整数与文本进行比较时,文本将转换为整数。