OpenSearch表结构

应用结构

数据推送到OpenSearch后会先保存到离线数据表中,在此阶段,为了方便用户推送数据,数据表允许用户根据实际业务场景定义多个表(需要指定关联字段),并提供了数据处理的插件。数据处理完毕后会join成一张索引表,这种索引表主要定义搜索属性,供引擎构建索引及查询使用。

数据表字段

数据表主要为数据导入时使用,不同的数据处理插件对类型有不同的要求。具体字段取值范围,请参见系统限制-字段相关部分说明。超过取值范围将溢出或者截断,请务必保证选择类型正确。

类型

说明

INT

int64整型

INT_ARRAY

int64整型数组

FLOAT

浮点型

FLOAT_ARRAY

浮点型数组

DOUBLE

浮点型

DOUBLE_ARRAY

浮点型数组

LITERAL

字符串常量,仅支持精确匹配

LITERAL_ARRAY

字符串常量数组,单个元素仅支持精确匹配

SHORT_TEXT

短文本,长度在100字节内,支持若干分词方式

TEXT

长文本,支持若干分词方式

TIMESTAMP

uint64整型,时间戳数据

GEO_POINT

字符串常量,经纬度字段,格式为:”经度 纬度”

保留字段说明:

  • [‘service_id’, ‘ops_app_name’, ‘inter_timestamp’, ‘index_name’, ‘pk’, ‘ops_version’, ‘ha_reserved_timestamp’] 这些字段名称为保留字段,暂时无法作为字段名称配置

ARRAY数组类型说明:

  • 如果应用字段创建为ARRAY类型,数据源字段映射时,该字段可以关联varchar/string(字符串类型),并使用数据源插件解析数据源字段。

  • 若该ARRAY类型字段使用API/SDK推送,则请按数组类型推送,不要按string推送。如:String[] literal_array = {“阿里云”,”开放搜索”};

时间戳字段说明:

  • INT和TIMESTAMP类型可以映射数据源字段中的datetime/timestamp字段,会自动将其转化为毫秒数。搜索时可以通过range,按时间区间过滤召回。

支持的数据源字段类型

数据源

支持的字段类型

RDS

TINYINT,SMALLINT,INTEGER,BIGINT,FLOAT,REAL,DOUBLE,NUMERIC,DECIMAL,TIME,DATE,TIMESTAMP,VARCHAR

PolarDB

TINYINT,SMALLINT,INTEGER,BIGINT,FLOAT,REAL,DOUBLE,NUMERIC,DECIMAL,TIME,DATE,TIMESTAMP,VARCHAR

MaxCompute(原odps)

BIGINT,DOUBLE,BOOLEAN,DATETIME,STRING,DECIMAL,MAP,ARRAY,TINYINT,SMALLINT,INT,FLOAT,CHAR,VARCHAR,DATE,TIMESTAMP,BINARY,INTERVAL_DAY_TIME,INTERVAL_YEAR_MONTH,STRUCT

OpenSearch表的字段类型与数据库表的字段类型的对应关系

OpenSearch表

RDS表

PolarDB表

MaxCompute(原odps)表

INT

BIGINT,TINYINT,SMALLINT,INTEGER

BIGINT,TINYINT,SMALLINT,INTEGER

BIGINT,TINYINT,SMALLINT,INT

INT_ARRAY

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

FLOAT

FLOAT,NUMERIC,DECIMAL

FLOAT,NUMERIC,DECIMAL

FLOAT,DECIMAL

FLOAT_ARRAY

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

DOUBLE

DOUBLE,NUMERIC,DECIMAL

DOUBLE,NUMERIC,DECIMAL

DOUBLE,DECIMAL

DOUBLE_ARRAY

VARCHAR等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

LITERAL

VARCHAR等字符串类型

VARCHAR等字符串类型

VARCHAR、STRING等字符串类型

LITERAL_ARRAY

VARCHAR等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR等字符串类型,需用数据源插件MultiValueSpliter转换

VARCHAR、STRING等字符串类型,需用数据源插件MultiValueSpliter转换

SHORT_TEXT

VARCHAR等字符串类型

VARCHAR等字符串类型

VARCHAR、STRING等字符串类型

TEXT

VARCHAR等字符串类型

VARCHAR等字符串类型

VARCHAR、STRING等字符串类型

TIMESTAMP

datetime/timestamp类型

datetime/timestamp类型

datetime/timestamp类型

GEO_POINT

VARCHAR等字符串类型

VARCHAR等字符串类型

VARCHAR、STRING等字符串类型

注意

  • 数据源字段数据类型如果是FLOAT或DOUBLE类型,建议改为DECIMAL类型,否则可能会出现精度不正确的情况。

创建应用结构方式介绍

OpenSearch提供如下4中方式创建应用结构(OpenSearch的表结构):

  1. 通过数据源的方式创建(RDSMaxComputePolarDB);

  2. 手动创建(请参考下面的配置多表JOIN);

  3. 通过模板创建

  4. 上传文档创建

配置多表JOIN

这里以手动创建的方式介绍如何配置多表join,以两张表为例:main(主表)、test_tb_1(辅表):

1.选择主表,设置主表主键:
2设置辅表主键:
3.设置主辅表关联关系(在主表里设置):
注意
  • OpenSearch支持的主辅表数据关联关系可点击此处进行参考;

  • 只有int 或 literal字段类型可以做关联字段;

  • 主辅表join时,join的字段必须类型相同,要是int都是int,要是literal都是literal;

  • 辅表join主表时,必须用辅表的主键join主表的某个字段,不能用辅表的非主键字段join主表;