postgresql 由于单词编号索引中的间隙,无法使用从jsonb构建的tsvector执行后续运算符

9vw9lbht  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(77)

输入:
select to_tsvector('simple', '["one","two","three"]'::jsonb)
退货
'one':1 'three':5 'two':3
预期:
'one':1 'three':3 'two':2
哪些单词有索引2和4?这是一个bug吗?我如何以有效的方式使用它?
由于索引编号中存在这些间隔,因此使用followed-by运算符的任何搜索(例如:'one' <-> 'zwo')注定要失败。
如何使用不可变的existing函数来修复这个问题?jsonb源自对jsonb_path_query_array()的调用,可以将其更改为jsonb_path_query(),但我不知道如何将一组jsonb值合并到单个tsvector中。

t98cgbkg

t98cgbkg1#

我认为跨多个JSON数组元素的短语查询是,呃,很奇怪的。
您可以通过将JSON转换为text来解决这个问题:

select to_tsvector('simple', '["one","two","three"]'::jsonb::text);

        to_tsvector        
═══════════════════════════
 'one':1 'three':3 'two':2
(1 row)

该类型转换为IMMUTABLE

相关问题