zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    xuexi
    太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记
    python 死循环
    redis 锁
    Opencv4.1.0交叉编译----终端摄像头内算法嵌入,海思HISI、雄迈ARM编译链使用经验
    SpringCloud之FeignClient调用跨微服接口
    Elasticsearch父子级查询及祖孙辈parent/child关联查询
    服务器ip地址与域名解析及http转https
    RestTemplate请求第三方接口添加Headers token及设置请求体
    kanzi 一些基础参数变量
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10641105.html
Copyright © 2011-2022 走看看