全部产品
Search
文档中心

智能开放搜索 OpenSearch:使用限制

更新时间:Mar 27, 2024

系统相关

每个用户实例个数

不限制

每个用户doc总数

理论上不限制,具体根据配额存储容量计算

每个用户pv总数

理论上不限制,具体根据配额LCU峰值计算

支持系统字符编码

UTF-8

实例相关

集群规格

共享集群

独享集群

实例名长度

30字符

字段名长度

30字符

排序表达式名称长度

30字符

字段个数

256个

512个

源表表名长度

16字符

索引字段名

64字符

INT类字段个数

256个

TIMESTAMP类型的字段个数

4个

GEO_POINT类型的字段个数

2个

LITERAL字段个数(不支持创建为组合索引)

256个

TEXT、SHORT_TEXT类型字段个数

32个

64个

数值分析索引个数

4个

8个

组合索引个数

4个

8个

单个组合索引包含字段数

8个

INT类型构建数值分析索引个数

4个

8个

GEO_POINT类型构建数值分析索引个数

2个

TIMESTAMP类型构建数值类型索引个数

4个

TEXT、SHORT_TEXT类型单字段索引个数

4个

8个

LITERAL类型单字段索引个数

256个

INT类型构建关键字分析索引个数

256个

向量索引个数

0个

2个

总数据源个数

20个

说明

高性能检索版-独享存储型相关限制说明:

  • 表总数不能超过系统最大限制8个;

  • 不支持配置查询分析、搜索结果展示功能。

字段相关

INT64

-2^63~2^63-1

FLOAT

+/-3.40282e+038

DOUBLE

+/-1.79769e+308

LITERAL

65535个字节

TEXT

65536个词

SHORT_TEXT

100字节,超过后截断

LITERAL_ARRAY

字段长度总体不能超过65535个字节(算上元素之间的2字节的系统内置分隔符),如果超过,则会截断到最大满足长度限制的最后一个完整元素为止。(性能消耗较大,推荐控制在100个元素内)

INT_ARRAY、FLOAT_ARRAY、DOUBLE_ARRAY

如果设置为属性字段,则限制是最多65535个元素(推荐控制在100个元素内)

排序表达式

基础排序表达式条数

30个

业务排序表达式条数

30个

每个基础排序可设置的特征函数项

4个

搜索结果摘要

描述

取值范围

片段长度

表示摘要长度

[1,300] 字节

片段数量

在摘要长度内需要几个片段

[1,5]

推送数据(应用级别)

API 每次推送总文档数上限

1000个,建议100个性能更好(建议打包推送)

API 每秒推送总次数上限

500次,超出后本次请求将失败,并提示rate exceeds app quota

API 每次请求总容量上限

2M/s,超出后本次请求将失败,并提示rate exceeds app quota

API 每秒请求总容量上限

2M/s,超出后本次请求将失败,并提示rate exceeds app quota

RDS/PolarDB增量同步速率上限

2M/s,超出后系统将自动限速,增量数据同步延迟

每条文档大小上限

1M,超出后该记录同步失败,并提示The total size of documents exceed

增量处理时效性

99%的文档推送成功后可以在1秒内搜索到,99.9%在1分钟内

说明

● 超过推送数据的上限会导致增量数据同步延迟;

● 已使用的存储容量若超出应用配额,系统将自动丢弃API推送数据的请求,扩容后需重新推送;

● 已使用的存储容量若超出应用配额,系统将自动停止同步RDS/PolarDB的增量消息,扩容后会自动从停止的时间点继续同步增量数据。

● 增量数据同步tps超过限制,会导致索引重建无法追上实时增量数据,从而导致索引重建一直无法完成;

● 规格为独享集群实例的应用可以适当调整推送数据的上限;

● 若配置了RDS/PolarDB数据源,并且同步方式选择自动同步,OpenSearch将尽力保障同步服务的稳定性但不保障同步的延迟,如果对同步延迟比较敏感的业务建议同步方式采用DTS数据订阅实例(DTS实时同步

推送数据中不能包含下列系统保留不可见字符

编码

(emacs/vi)中的显示形态

“\x1E\n”

^^

“\x1F\n”

^_

“\x1C”

^\

“\x1D”

^]

“\x03”

^C

说明
  • 字段内容中若出现上述系统不支持的字符,该记录将不会同步至应用中;

  • 不可见字符(如:\u0002、\u0003等)会被自动转换为\t;

  • 目前引擎支持的字符集有限,如下:

    • CJK_1 (\xe2[\xba-\xbf][\x80-\xbf])

    • CJK_2 ([\xe3-\xe9][\x80-\xbf][\x80-\xbf])

    • FULLWIDTH_1 (\xef[\xbc-\xbe][\x80-\xbf])

    • FULLWIDTH_2 (\xef\xbf[\x80-\xaf])

搜索相关

每个子句(除filter)最大长度

编码前1k,超长后本次请求报错丢弃

filter子句最大长度

编码前4k,超长后本次请求报错丢弃

单次请求最多返回结果数(不分页)

500

搜索返回的最大结果数(包括分页多次请求)

5000

参与基础排序文档数

100万

参与业务排序文档数

默认200

说明
  • 传统搜索场景的主要目的是为了尽量短的时间内召回最符合的结果,所以对搜索结果进行了限制,例如 search方法最多只能召回5000条文档。在某些场景下需要提供更多的结果来进行分析工作,可以使用scroll方法来获取更多的结果

  • 搜索请求若超出应用配额的LCU量,超出后的请求将被丢弃,并报错code:6015,message:Dropped by over compute resource quota

索引重建

同步速率上限

20MB/s

SQL相关

限制项

最大值/限制条件

分类

说明

DDL/DML

N/A

不支持

全局内存限制

N/A

不支持

避免对全量数据排序打散并返回。如SELECT * FROM t ORER BY id LIMIT 1000000000。数据量过大时会发生OOM。

NULL类型

N/A

不支持

对Left Join等出现NULL类型的场景,会用默认值代替。

LIKE/RLIKE

N/A

不支持

LIKE/RLIKE在大数量场景下存在性能瓶颈。建议优先使用搜索方式(QUERY函数)。

数据重分布(Re-Shuffle)

N/A

不支持

用户需要根据业务场景和查询模式设计好离线数据分布。引擎目前不支持跨分片的数据重分布,对于多表Join或复杂的Agg场景存在一定的限制。

用户查询出错时建议分析下查询计划。

UDF函数名

N/A

建议项

避免与SQL关键字/保留字重名。重名时需要通过反引号(`)转义。

表名/列名

N/A

格式限制

表名、列名中不能有特殊字符,以字母开头,且只能用英文小写字母(a-z)、英文大写字母(A-Z)、数字和下划线(_)。

统计算子

最大Key数量: 500W

最大内存使用: 512M

数量限制

上述限制为单个统计算子。

默认返回结果数量

100

数量限制

SQL最外层没有LIMIT子句,为了防止返回数据过多,默认会增加LIMIT 100。

数组类型

N/A

操作限制

  1. 数组类型的比较、查询等需要通过udf来操作(如contain/notcontain等),不支持=、<>、IN等操作;

  2. GROUP BY不支持数组类型,需要提前UNNEST展开,展开后数据量可能会急剧膨胀,请评估好性能恶化情况;

  3. JOIN不支持数组类型,需要通过MULTICAST展开,JOIN后数据量可能会急剧膨胀,请评估好性能恶化情况;

动态参数

N/A

操作限制

只支持表达式中的常量替换。不支持替换字段名、表名。不支持替换LIMIT。

ORDER BY子句

N/A

操作限制

必须与LIMIT配对使用。

UNION

N/A

操作限制

  1. 输入表对应字段名称、类型、数量必须严格一致。

  2. (目前只支持UNION ALL。UNION不支持。

Summary表查询

N/A

操作限制

Summary表目前不支持全表扫描,查询时必须包括PK等值条件。

子表查询

N/A

操作限制

子表内部表示为一个结构化类型(MultiSet)的字段,该字段不支持返回。查询子表时避免使用SELECT *操作。

DATE/RANGE索引查询

N/A

操作限制

目前不支持使用"="查询。可以通过QUERY函数查询,如QUERY('time', '[1, 10]')。

Attribute字段

N/A

操作限制

SQL场景下默认所有字段均建attribute。TEXT、SHORT_TEXT不支持表达式计算。

常量字符串

N/A

N/A

1、SQL语句中的常量字符串需要在两边加单引号如:SELECT 'abc' FROM t;

2、SQL语句中的常量字符串如果自身包含了单引号,则每个单引号使用两个单引号来表示,如

SELECT 'ab''c' FROM t; // 字符串实际值为ab'c

SELECT 'ab''''c' FROM t;// 字符串实际值为ab''c;

3、动态参数中字符串类型的转义问题建议参考doc