首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres中的Quill-Delta JSON数组

Postgres中的Quill-Delta JSON数组
EN

Database Administration用户
提问于 2019-02-21 11:33:30
回答 1查看 514关注 0票数 0

我需要以Quill-Delta格式存储文本,这是一个JSON数组的形式。

代码语言:javascript
复制
-----------------------------------------------------------------
| id | title | content                                          |
-----------------------------------------------------------------
| 10 | Hello | [ { "insert": "Hello" }, { "insert": "World" } ] |
| 20 | Image | [ { "insert": { "image": "data:image/j..." } } ] |
-----------------------------------------------------------------

然后,我需要查询它,例如选择包含"hello world“的文本的位置,例如:

  1. 如果我查询content的“你好世界”,我会得到第10行;
  2. 如果我查询content的“插入”,我没有得到任何结果;
  3. 如果我查询content表单“图像”,我将不会得到任何结果。

实际上,它应该只搜索数组对象的insert键,其中值是JSON (没有其他类型)。

我能在Postgres中实现这一存储数据吗?我读过关于在JSONB上进行全文搜索的文章,但是我想不出一个有用的例子。

EN

回答 1

Database Administration用户

发布于 2019-03-04 15:16:13

我提出了一个函数和一个索引;这是一个函数,它接受insert JSON-String键并从它们构建一个tsvector

代码语言:javascript
复制
create or replace function public.fts_quill_delta(lang regconfig, delta text) returns tsvector as
$
begin
return to_tsvector(lang, string_agg(value->>'insert', ' ')) from jsonb_array_elements(delta::jsonb) where jsonb_typeof(value->'insert') = 'string';
end;
$
language 'plpgsql' immutable;

这是一个指数:

代码语言:javascript
复制
create index content_delta_fts on my_table using gin(fts_quill_delta(lang, content));

然后,您可以使用以下方法查询索引:

代码语言:javascript
复制
select from my_table where fts_quill_delta(lang, content) @@ 'hello & world'

注意,我添加了一个lang列,由FTS引擎使用它来使用正确的I18N设置。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/230370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档