zombodb 索引创建
索引的创建是zombodb 的核心,我们都是需要先创建table,然后创建索引,创建的时候我们可以指定es 集群的地址,同时可能需要使用
一些地址api(比如数据直接存储在es 中而不是pg 中)
表创建
CREATE TABLE products (
id SERIAL8 NOT NULL PRIMARY KEY,
name text NOT NULL,
keywords varchar(64)[],
short_summary text,
long_description zdb.fulltext,
price bigint,
inventory_count integer,
discontinued boolean default false,
availability_date date,
manufacturer_id bigint
);
索引所有列
使用.*
参考
CREATE INDEX idxproducts
ON products
USING zombodb ((products.*))
WITH (...);
索引指定列
一般我们会使用自定义类型,方便索引的创建,如下:
CREATE TYPE products_idx_type AS (
id bigint,
name varchar,
short_summary text
);
CREATE INDEX idxproducts
ON products
USING zombodb ((
ROW(
id,
name,
short_summary
)::products_idx_type
))
WITH (...)
配置基于sql 逻辑的索引
CREATE TYPE products_idx_type AS (
id bigint,
name varchar,
description text
);
CREATE INDEX idxproducts
ON products
USING zombodb ((
ROW(
id,
name,
COALESCE(short_summary, '') || ' ' || COALESCE(long_description, '')
)::products_idx_type
))
WITH (...)
基于函数的索引
我们可以使用函数来创建比较复杂的索引
如下,通过函数索引表的每行数据
- 创建表
CREATE TABLE manufacturer (
id SERIAL8 NOT NULL PRIMARY KEY,
name text NOT NULL,
address1 text,
address2 text,
city varchar,
state varchar(2),
zip_code varchar,
phone varchar,
fax varchar,
support_email varchar
);
- 创建自定义类型
CREATE TYPE products_idx_type AS (
id bigint,
name varchar,
short_summary text,
manufacturer jsonb
);
- 函数创建
CREATE FUNCTION products_with_manufacturer(products) RETURNS products_idx_type IMMUTABLE STRICT LANGUAGE SQL AS $$
SELECT ROW($1.id, $1.name, $1.short_summary, (SELECT row_to_json(m) FROM manufacturer m WHERE m.id = $1.manufacturer_id))::products_idx_type;
$$;
- 创建索引
CREATE INDEX idxproducts
ON products
USING zombodb (products_with_manufacturer(products))
WITH (...);
- 数据检索,使用嵌套对象数据
SELECT * FROM products WHERE products ==> 'manufacturer.name:Sears';
- 说明
注意函数的实现语言,支持postgres 支持的任何语言,不只是sql,修改函数的实现,会触发数据的重新索引
参考资料
https://github.com/zombodb/zombodb/blob/master/CREATE-INDEX.md
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2017-04-02 web 优化原则