zombodb 与es 数据类型的映射处理

  • 通用数据类型映射
Postgres 类型 Elasticsearch JSON 映射定义
bytea {"type": "binary"}
boolean {"type": "boolean"}
smallint {"type": "short"}
integer {"type": "integer"}
bigint {"type": "long"}
real {"type": "float"}
double precision {"type": "double"}
character varying {"type": "keyword", "copy_to": "zdb_all", "normalizer": "lowercase", "ignore_above": 10922}
text {"type": "text", "copy_to": "zdb_all", "analyzer": "zdb_standard", "fielddata": true}
time without time zone {"type": "date", "format": "HH:mm:ss.SSSSSS", "copy_to": "zdb_all"}
time with time zone {"type": "date", "format": "HH:mm:ss.SSSSSSZZ", "copy_to": "zdb_all"}
date {"type": "date", "copy_to": "zdb_all"}
timestamp without time zone {"type": "date", "copy_to": "zdb_all"}
timestamp with time zone {"type": "date", "copy_to": "zdb_all"}
json {"type": "nested", "include_in_parent": true}
jsonb {"type": "nested", "include_in_parent": true}
inet {"type": "ip", "copy_to": "zdb_all"}
zdb.fulltext {"type": "text", "copy_to": "zdb_all", "analyzer": "zdb_standard"}
zdb.fulltext_with_shingles {"type": "text", "copy_to": "zdb_all", "analyzer": "fulltext_with_shingles", "search_analyzer": "fulltext_with_shingles_search"}
  • 说明
character varying (varchar) 没有被es 分词,整个值是被索引的,同时转换为小写
text 类型es 使用标准分析器,同时被转换为小写
json/jsonb 映射为es 的 nested对象

zombodb 自定义的领域类型

  • zdb.fulltext 和text 类似,但可以为客户端应用程序提供额外的元数据信息,表明该列可能包含大量内容
  • zdb.fulltext_with_shingles 与zdb.fulltext 类型 ,但是通过2-gram single filter 支持高速的右截断通配符

特定语言类型

支持包好各类语言的支持

自定义分析器

zombodb 支持基于sql 扩展灵活的分析器、、过滤器

  • 分析器函数定义
FUNCTION zdb.define_analyzer(name text, definition json)
  • 使用说明
    为了使用自定义分析器你同时必须自定义使用相同名称的pg domain 然后在表中作为列使用,同时
    你也可以和自定义字段映射依赖使用通过zdb.define_field_mapping() 函数,注意修改任何分析器需要
    重建索引
  • token 过滤器
FUNCTION zdb.define_filter(name text, definition json)
  • character 过滤器
FUNCTION zdb.define_char_filter(name text, definition json) 
  • tokenizer
FUNCTION zdb.define_tokenizer(name text, definition json)
  • normalizer
FUNCTION zdb.define_normalizer(name text, definition json) 
  • type 映射
FUNCTION zdb.define_type_mapping(type_name regtype, definition json)

特定字段的映射函数

除过domain type 映射pg type 到es 分析器,我们同时也可以定义表或者表中字段的映射,
注意修改字段的映射需要重建索引

  • 方法签名
FUNCTION zdb.define_field_mapping(table_name regclass, field_name text, definition json) 
  • 一个特殊映射函数
    比较适合处理只在es 索引中存在的,比如映射到copy_to 属性
FUNCTION zdb.define_es_only_field(table_name regclass, field_name text, definition json)

参考例子

  • 代码

    注意官方create index部分有点问题,我添加了url 参数,实际使用可以参考github 项目,有基于docker-compose 的代码

SELECT zdb.define_tokenizer('example_tokenizer', '{
"type": "pattern",
"pattern": "_"
}');
SELECT zdb.define_analyzer('example', '{
"tokenizer": "example_tokenizer"
}');
CREATE DOMAIN example AS text;
CREATE TABLE foo (
id serial8,
some_field example
);
CREATE INDEX idxfoo ON foo USING zombodb ((foo.*))
WITH (url='http://elasticsearch:9200/');
INSERT INTO foo (some_field) VALUES ('this_is_a_test');
SELECT * FROM foo WHERE foo ==> 'some_field:this';

测试分析器

zombodb 内置了一些函数方便我们进行分析器的测试

  • 内置分析器分析函数签名
FUNCTION zdb.analyze_with_field(
index regclass,
field text,
text text)
RETURNS TABLE (
type text,
token text,
"position" int,
start_offset int,
end_offset int)
  • 参考例子
SELECT * FROM zdb.analyze_with_field('idxproducts', 'keywords', 'this is a test');
type | token | position | start_offset | end_offset
------+----------------+----------+--------------+------------
word | this is a test | 0 | 0 | 14
(1 row)

es _all 字段说明

zombodb 禁止了es 的_all 字段使用了自己的字段命名 zdb_all,默认所有非数字的类型字段都添加到了zdb_all

参考资料

https://github.com/zombodb/zombodb/blob/master/TYPE-MAPPING.md
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html
https://www.cnblogs.com/rongfengliang/p/10638334.html

 
 
 
 

zombodb 数据类型映射的更多相关文章

  1. [转]jni数据类型映射、域描述符说明

    在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下: 1.primitive types ---- ...

  2. Oracle 数据类型映射C#

    Oracle 数据类型映射 下表列出 Oracle 数据类型及其与 OracleDataReader 的映射. Oracle 数据类型 由 OracleDataReader.GetValue 返回的  ...

  3. SQL Server 数据类型映射 (ADO.NET)

    SQL Server 数据类型映射 (ADO.NET) .NET Framework 3.5 更新:November 2007 SQL Server 和 .NET Framework 基于不同的类型系 ...

  4. JNI实战(三):JNI 数据类型映射

    在JNI实战(二):Java 调用 C 我们了解了JNI的静态注册和动态注册.也知道我们应该使用动态注册来进行JNI函数与Java方法之间的映射. 示例的映射表的数组为如下: static JNINa ...

  5. SQL Server 数据类型映射(转载)

    SQL Server 数据类型映射 SQL Server 和 .NET Framework 基于不同的类型系统. 例如,.NET Framework Decimal 结构的最大小数位数为 28,而 S ...

  6. SQL Server 与 ADO.NET 数据类型映射

    SQL Server 数据类型映射 .NET Framework 4.5 SQL Server 和 .NET Framework 基于不同的类型系统. 例如,.NET Framework Decima ...

  7. 006android初级篇之jni数据类型映射

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++) 使用JNI的副作用 一旦使用JNI,JAVA程序就丧失了JAV ...

  8. Razor视图引擎布局 Razor视图引擎的基本概念与法语 SQL Server Mobile 和 .NET 数据访问接口之间的数据类型映射 binary 和 varbinary datetime 和 smalldatetime float 和 real

    Razor视图引擎布局   不需要像过去aspx一样,使用.Master文件,而是统一使用.cshtml 或 .vbhtml文件.但文件名一般以 _开头,这样做文件不会当做View显示出来 使用@Re ...

  9. JNI学习积累之二 ---- 数据类型映射、域描述符说明

    本文原创,转载请注明出处:http://blog.csdn.NET/qinjuning 在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与 ...

随机推荐

  1. FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”

    FTP的主动模式(PORT Mode)及被动模式(Passive Mode) FTP的特殊性: 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯. ...

  2. 第 8 章 容器网络 - 065 - 容器在 Weave 中如何通信和隔离?

    首先在host2 执行如下命令: weave launch 10.12.31.22 这里必须指定 host1 的 IP 10.12.31.22,这样 host1 和 host2 才能加入到同一个 we ...

  3. Qgis练手

    师妹推荐了一个神器 Qgis,因为看我拿Echarts和Excel缝缝补补效率实在太低下. 还记得,以前写过一个“echarts画中国地图并上色”的笔记,那个应付一下事还行,真正需要精细画图的时候还得 ...

  4. [Oracle11g] 通过伪列查询

    oracle中的伪列默认第一行是1,所以可以选择<=rownum的方法选取,但是>是无法选取的.这时候需要固化伪列. 固化前可以这样查询:select * from  表名 where r ...

  5. ionicAPP打开第三方APP

    近来,碰到一个问题,需要在ionicAPP中打开第三方APP 然后,就找资料,发现了个比较好的解决方案 可以参考:https://blog.csdn.net/a727911438/article/de ...

  6. redis的发布订阅、持久化存储、redis的主从复制

    redis的发布订阅 1. 创建redis配置文件 vim /opt/redis_conf/reids-6379.conf mkdir /data/6379 redis-server  redis-6 ...

  7. 『TensorFlow』流程控制之tf.identity

    一个详细介绍 下面程序要做的是,5次循环,每次循环给x加1,赋值给y,然后打印出来, x = tf.Variable(0.0) #返回一个op,表示给变量x加1的操作 x_plus_1 = tf.as ...

  8. Php的基本语法学习

    1.php语法 当 PHP 解析一个文件时,会寻找开始和结束标记,标记告诉 PHP 开始和停止解释其中的代码. 1)标记语法 是以<?php 开头,?> 结束,相当于html标签的开始标签 ...

  9. Win10系列:C#应用控件基础16

    ToolTip控件 ToolTip控件常作为一些控件的子元素,当鼠标移动到指定控件上时在界面上弹出一个信息提示框.例如,为了节省窗体上的空间或增加美观性,仅在按钮上显示一个指示性图案,当鼠标移动到按钮 ...

  10. Hadoop学习笔记04_Hbase

    大数据开发的学习,组件还是很多的,都需要掌握并多加练习. 最好的参考文档当然是官方的了. 因为Hadoop生态圈组件很多,所以,在建设之初一定要检查好各版本的兼容性.避免后期麻烦. 我的练习使用Had ...