Limits
System limits
Item | Value |
Number of instances per user | Unlimited |
Total number of documents per user | Unlimited in theory. The actual limit is calculated based on the storage capacity quota. |
Total number of page views (PVs) per user | Unlimited in theory. The actual limit is calculated based on the peak LCU quota. |
Supported system character encoding | UTF-8 |
Instance limits
Item | Value | |
Cluster specification | Shared cluster | Exclusive cluster |
Instance name length | 30 characters | |
Field name length | 30 characters | |
Sort expression name length | 30 characters | |
Number of fields | 256 | 512 |
Source table name length | 16 characters | |
Index field name | 64 characters | |
Number of INT fields | 256 | |
Number of TIMESTAMP fields | 4 | |
Number of GEO_POINT fields | 2 | |
Number of LITERAL fields (cannot be used to create composite indexes) | 256 | |
Number of TEXT and SHORT_TEXT fields | 32 | 64 |
Number of numeric analysis indexes | 4 | 8 |
Number of composite indexes | 4 | 8 |
Number of fields in a single composite index | 8 | |
Number of numeric analysis indexes built on INT fields | 4 | 8 |
Number of numeric analysis indexes built on GEO_POINT fields | 2 | |
Number of numeric indexes built on TIMESTAMP fields | 4 | |
Number of single-field indexes on TEXT and SHORT_TEXT fields | 4 | 8 |
Number of single-field indexes on LITERAL fields | 256 | |
Number of keyword analysis indexes built on INT fields | 256 | |
Number of vector indexes | 0 | 2 |
Total number of data sources | 20 | |
Limits of OpenSearch High-performance Search Edition - exclusive storage-optimized instances:
The total number of tables cannot exceed the system maximum of 8.
The query analysis and search result display features cannot be configured.
Field limits
Item | Value |
INT64 | -2^63~2^63-1 |
FLOAT | +/-3.40282e+038 |
DOUBLE | +/-1.79769e+308 |
LITERAL | 65,535 bytes |
TEXT | 65,536 terms |
SHORT_TEXT | 100 bytes. Content that exceeds this limit is truncated. |
LITERAL_ARRAY | The total length of the field cannot exceed 65,535 bytes, including the 2-byte built-in system delimiters between elements. If the limit is exceeded, the field is truncated to the last complete element that satisfies the length limit. (This consumes considerable performance resources. We recommend that you keep the number of elements within 100.) |
INT_ARRAY, FLOAT_ARRAY, DOUBLE_ARRAY | If the field is configured as an attribute field, it can contain a maximum of 65,535 elements. (We recommend that you keep the number of elements within 100.) |
Sort expressions
Item | Value |
Number of basic sort expressions | 30 |
Number of business sort expressions | 30 |
Number of feature function items that can be configured for each basic sort | 4 |
Search result summaries
Item | Description | Valid values |
Snippet length | The length of the summary | [1,300] bytes |
Number of snippets | The number of snippets required within the summary length | [1,5] |
Data push (application level)
Item | Value |
Maximum total number of documents per API push | 1,000. We recommend 100 for better performance. (We recommend that you push documents in batches.) |
Maximum total number of API pushes per second | 500. If the limit is exceeded, the request fails and the rate exceeds app quota error is returned. |
Maximum total size per API request | 2M/s. If the limit is exceeded, the request fails and the rate exceeds app quota error is returned. |
Maximum total request size per second for the API | 2M/s. If the limit is exceeded, the request fails and the rate exceeds app quota error is returned. |
Maximum incremental synchronization rate for RDS/PolarDB | 2M/s. If the limit is exceeded, the system automatically throttles the rate, and incremental data synchronization is delayed. |
Maximum size per document | 1M. If the limit is exceeded, the record fails to be synchronized and the The total size of documents exceed error is returned. |
Incremental processing timeliness | 99% of documents can be searched within 1 second after they are pushed, and 99.9% within 1 minute. |
● If the data push limits are exceeded, incremental data synchronization is delayed.
● If the used storage capacity exceeds the application quota, the system automatically discards API data push requests. After you scale out, you must push the data again.
● If the used storage capacity exceeds the application quota, the system automatically stops synchronizing incremental messages from RDS/PolarDB. After you scale out, the system automatically resumes synchronizing incremental data from the point in time when synchronization stopped.
● If the TPS of incremental data synchronization exceeds the limit, index rebuilding cannot catch up with real-time incremental data, and as a result the index rebuilding never completes.
● For applications that use exclusive cluster instances, the data push limits can be adjusted as needed.
● If you configure an RDS/PolarDB data source and select Automatic Synchronization as the synchronization method, OpenSearch makes its best effort to ensure the stability of the synchronization service but does not guarantee synchronization latency. For businesses that are sensitive to synchronization latency, we recommend that you use a DTS data subscription instance (DTS real-time synchronization) as the synchronization method.
Pushed data cannot contain the following system-reserved invisible characters
Encoding | Display form (in emacs/vi) |
“\x1E\n” | ^^ |
“\x1F\n” | ^_ |
“\x1C” | ^\ |
“\x1D” | ^] |
“\x03” | ^C |
If field content contains any of the preceding characters that are not supported by the system, the record is not synchronized to the application.
Invisible characters (such as \u0002 and \u0003) are automatically converted to \t.
The engine currently supports a limited set of character sets, as listed below:
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])
Search limits
Item | Value |
Maximum length of each clause (except filter) | 1k before encoding. If the limit is exceeded, an error is returned and the request is discarded. |
Maximum length of the filter clause | 4k before encoding. If the limit is exceeded, an error is returned and the request is discarded. |
Maximum number of results returned per request (without paging) | 500 |
Maximum number of results returned by a search (including multiple paged requests) | 5000 |
Number of documents involved in basic sort | 1,000,000 |
Number of documents involved in business sort | 200 by default |
The main purpose of traditional search scenarios is to retrieve the most relevant results in the shortest possible time. Therefore, search results are limited. For example, the search method can retrieve a maximum of 5,000 documents. In some scenarios where more results are required for analysis, you can use scroll method to obtain more results.
If search requests exceed the LCU quota of the application, the excess requests are discarded and the following error is returned: code:6015, message:Dropped by over compute resource quota.
Index rebuilding
Item | Value |
Maximum synchronization rate | 20MB/s |
SQL limits
Limit item | Maximum value/Limit condition | Category | Description |
DDL/DML | N/A | Not supported | |
Global memory limit | N/A | Not supported | Avoid sorting, shuffling, and returning the full data set, such as SELECT * FROM t ORDER BY id LIMIT 1000000000. An out-of-memory (OOM) error occurs if the data volume is too large. |
NULL type | N/A | Not supported | In scenarios where NULL values occur, such as Left Join, default values are used instead. |
LIKE/RLIKE | N/A | Not supported | LIKE/RLIKE has performance bottlenecks in scenarios with large data volumes. We recommend that you use search (the QUERY function) first. |
Data redistribution (Re-Shuffle) | N/A | Not supported | You need to design the offline data distribution based on your business scenarios and query patterns. The engine currently does not support cross-shard data redistribution, which imposes certain limits on multi-table Join or complex Agg scenarios. If a query error occurs, we recommend that you analyze the query plan. |
UDF name | N/A | Recommendation | Avoid using names that are the same as SQL keywords or reserved words. If a name is the same, escape it with backticks (`). |
Table name/Column name | N/A | Format limit | Table names and column names cannot contain special characters. They must start with a letter and can contain only lowercase letters (a-z), uppercase letters (A-Z), digits, and underscores (_). |
Aggregation operator | Maximum number of keys: 5,000,000 Maximum memory usage: 512M | Quantity limit | The preceding limits apply to a single aggregation operator. |
Default number of returned results | 100 | Quantity limit | If the outermost layer of an SQL statement has no LIMIT clause, LIMIT 100 is added by default to prevent excessive data from being returned. |
Array type | N/A | Operation limit |
|
Dynamic parameters | N/A | Operation limit | Only constants in expressions can be replaced. Field names, table names, and LIMIT cannot be replaced. |
ORDER BY clause | N/A | Operation limit | Must be used together with LIMIT. |
UNION | N/A | Operation limit |
|
Summary table query | N/A | Operation limit | Summary tables currently do not support full table scans. Queries must include an equality condition on the PK. |
Sub-table query | N/A | Operation limit | A sub-table is internally represented as a field of a structured type (MultiSet), and this field cannot be returned. Avoid using SELECT * when you query sub-tables. |
DATE/RANGE index query | N/A | Operation limit | Queries that use "=" are currently not supported. You can use the QUERY function instead, such as QUERY('time', '[1, 10]'). |
Attribute field | N/A | Operation limit | In SQL scenarios, attributes are created for all fields by default. TEXT and SHORT_TEXT fields do not support expression calculation. |
Constant string | N/A | N/A | 1. Constant strings in SQL statements must be enclosed in single quotation marks, such as: SELECT 'abc' FROM t; 2. If a constant string in an SQL statement contains single quotation marks, each single quotation mark must be represented by two single quotation marks, such as SELECT 'ab''c' FROM t; // The actual value of the string is ab'c SELECT 'ab''''c' FROM t; // The actual value of the string is ab''c; 3. For information about escaping string-type values in dynamic parameters, we recommend that you refer to doc. |