Search indexes in Lindorm wide tables have the following limitations.
Supported data types
Search index columns support these data types: BOOLEAN, BYTE, SHORT, INT, LONG, FLOAT, DOUBLE, STRING, CHAR, BINARY, TIMESTAMP, and JSON.
TIMESTAMP and JSON are supported only in Lindorm 2.6.5 and later. For version information and upgrade instructions, see Release notes of LindormTable and Minor version update.
STRING length limit
The maximum length for a STRING value is 8,191 characters:
| Tokenization | Limit applies to |
|---|---|
| Disabled | The full STRING value |
| Enabled | Each resulting term |
If a value exceeds this limit — either as the original string or as a tokenized term — the column value is excluded from the search index.
For more information about tokenization, see Tokenization queries.
Number of search indexes per table
By default, each wide table supports one search index. To create multiple search indexes on the same table, see Multiple search indexes for a single table (Public Preview).
Time to Live (TTL)
TTL behavior for search indexes depends on whether the base table has a TTL configured at the time the search index is created:
| Base table TTL at creation | Search index behavior |
|---|---|
| Configured | Inherits the base table's TTL upon creation |
| Not configured | Adopts the base table's TTL the first time you set a TTL on the base table |
In both cases, subsequent changes to the base table's TTL do not affect the search index's TTL. To modify the TTL of a search index separately, contact Lindorm technical support (DingTalk ID: s0s3eg3).
TTL expiration is enforced by a background process, so expired data may persist for a short time after its TTL expires.
Multiple data versions
Search indexes do not support multiple versions for data in index key columns.
Custom timestamps
By default, Lindorm generates a timestamp in milliseconds for each row of data, which serves as the data version.
Before writing data with custom timestamps to a wide table that has a search index, set the table's MUTABILITY attribute to MUTABLE_ALL.
To set the MUTABILITY attribute:
HBase Shell:
ALTER 'testTable', MUTABILITY=> 'MUTABLE_ALL'Lindorm SQL:
ALTER TABLE testTable SET 'MUTABILITY' = 'MUTABLE_ALL';
The default value of MUTABILITY is MUTABLE_LATEST. For details on mutability types, see Key concepts.
After setting MUTABILITY to MUTABLE_ALL, specify a custom timestamp when writing data:
HBase client:
public Put(byte[] row, long ts) public Put addColumn(byte[] family, byte[] qualifier, long ts, byte[] value)Lindorm SQL:
UPSERT INTO testTable (pk, c1, c2, _l_ts_) VALUES ('1', '2', '3', 1640966400000);
The methods available for specifying custom timestamps vary by client.
If you encounter any issues, submit a ticket.