全部產品
Search
文件中心

Tablestore:多元索引

更新時間:Jun 05, 2026

通過命令列工具建立和管理多元索引,實現非主鍵列查詢、多條件組合查詢等多維度資料查詢。

前提條件

  • 已完成命令列工具的安裝和訪問憑證配置。具體操作,請參見命令列工具

  • 已建立資料表。具體操作,請參見資料表操作

建立多元索引

create_search_index -n <indexName>

參數

必填

說明

-i,--input

通過 JSON 格式的檔案配置多元索引 Schema。不指定時通過互動式輸入。

-n,--name

多元索引名稱。

-t,--table

資料表名稱。已通過use選定資料表時可省略。

--ttl

資料生命週期(TTL),即資料的儲存時間。單位為秒。預設值為 -1(永不到期)。取值最低為 86400 秒(一天)。資料儲存時間超過 TTL 後,系統自動清理到期資料。

重要

使用多元索引生命週期管理功能,必須禁用資料表的 UpdateRow 更新寫入功能。多元索引的 TTL 和資料表的 TTL 是獨立的,多元索引的 TTL 值必須小於或等於資料表的 TTL 值。

執行命令後根據系統提示輸入索引 Schema(JSON 格式),或通過-i參數指定 Schema 檔案。Schema 包含以下配置項:

參數

必填

說明

IndexSetting

索引設定,包含 RoutingFields 設定。

RoutingFields(可選):自訂路由欄位。可以選擇部分主鍵列作為路由欄位,索引資料讀寫時,路由欄位值相同的資料會被分配到相同分區,從而提高查詢效率。通常只需設定一個路由欄位。如果設定多個路由欄位,系統會將多個路由欄位的值拼接成一個值。

FieldSchemas

FieldSchema 的列表,每個 FieldSchema 包含如下內容:

  • FieldName(必選):建立多元索引的欄位名,即列名,類型為 String。多元索引中的欄位可以是主鍵列或者屬性列。

  • FieldType(必選):欄位資料類型

  • IsArray(可選):是否為數組,類型為 Boolean。如果設定為 true,則表示該列是一個數組,在寫入時必須按照 JSON 數組格式寫入,例如["a","b","c"]。由於 Nested 類型是一個數組,當 FieldType 為 Nested 類型時,無需設定此參數。

  • Index(可選):是否開啟索引,類型為 Boolean。預設為 true,表示對該列構建倒排索引或者空間索引;如果設定為 false,則不會對該列構建索引。

  • Analyzer(可選):分詞器類型。當欄位類型為 Text 時可以設定此參數;如果不設定,則預設分詞器類型為單字分詞。

  • AnalyzerParameter:使用單字分詞時的分詞參數,包含 CaseSensitive(是否大小寫敏感,預設 false)和 DelimitWord(是否分割英文和數字,預設 false)。

  • EnableSortAndAgg(可選):是否開啟排序與統計彙總功能,類型為 Boolean。只有 EnableSortAndAgg 設定為 true 的欄位才能進行排序

    重要

    Nested 類型的欄位不支援開啟排序與統計彙總功能,但是 Nested 類型內部的子列支援開啟排序與統計彙總功能。

  • Store(可選):是否在多元索引中附加儲存該欄位的值,類型為 Boolean。開啟後可以直接從多元索引中讀取該欄位的值,而不必反查資料表,可用於查詢效能最佳化。

  • IsVirtualField(可選):該列是否為虛擬列,類型為 Boolean,預設值為 false。設定為 true 時必須同時設定 SourceFieldNames。

  • SourceFieldNames(可選):資料表中的欄位名稱,類型為 String。當設定 IsVirtualField 為 true 時必須設定此參數。

IndexSort

索引預排序設定,包含 Sorters 設定。如果不設定,則預設按照主鍵排序。

重要

含有 Nested 類型的索引不支援 IndexSort,沒有預排序。

Sorters(可選):索引的預排序方式,包含 Name 和 Sorter 設定。支援按照主鍵排序和欄位值排序。更多資訊,請參見排序和翻頁

  • Name:排序方式。PrimaryKeySort 表示按照主鍵排序,FieldSort 表示按照欄位值排序(只有建立索引且開啟排序與統計彙總功能的欄位才能進行預排序)。

  • Sorter:包含 FieldName(排序的欄位名,欄位值排序時需要設定)和 Order(排序次序,ASC 升序或 DESC 降序,預設 ASC)。

樣本

建立 search_index 多元索引。

create_search_index -n search_index

根據系統提示輸入索引 Schema,樣本如下:

{
    "IndexSetting": {
        "RoutingFields": null
    },
    "FieldSchemas": [
        {
            "FieldName": "gid",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col3",
            "FieldType": "TEXT",
            "Index": true,
            "Analyzer": "single_word",
            "AnalyzerParameter": {
                "CaseSensitive": true,
                "DelimitWord": null
            },
            "EnableSortAndAgg": false,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        }
    ],
    "IndexSort": {
        "Sorters": [
            {
                "Name": "PrimaryKeySort",
                "Sorter": {
                    "Order": "ASC"
                }
            }
        ]
    }
}

通過檔案建立多元索引:

create_search_index -n search_index -i /tmp/indexschema.json

查看多元索引列表

list_search_index

參數

必填

說明

-a,--all

顯示所有表的多元索引列表。

-d,--detail

顯示多元索引的詳細資料。

-t,--table

資料表名稱。已通過use選定資料表時可省略。

樣本

查看當前表下的多元索引列表。

list_search_index -d

查看多元索引資訊

describe_search_index -n <indexName>

參數

必填

說明

-n,--name

多元索引名稱。

-o,--output

輸出查詢結果到本地 JSON 格式檔案或 TXT 格式檔案中。

-t,--table

資料表名稱。已通過use選定資料表時可省略。

樣本

查看 search_index 多元索引的資訊。

describe_search_index -n search_index

返回結果中的Index schema為多元索引的 Schema,TimeToLive 為多元索引的資料生命週期。

使用多元索引查詢資料

支援使用命令列工具操作的多元索引查詢類型包括精確查詢多詞精確查詢全匹配查詢匹配查詢短語匹配查詢首碼查詢範圍查詢萬用字元查詢基於分詞的萬用字元查詢組合查詢地理位置查詢列存在性查詢,根據業務需求選擇合適的查詢類型。

search -n <indexName> --return_all_indexed

執行命令後根據系統提示輸入查詢條件(JSON 格式),查詢條件包含以下配置項:

參數

必填

說明

Offset

本次查詢的開始位置。

Limit

本次查詢需要返回的最大數量。如果只為了擷取行數無需具體資料,可以設定 Limit 為 0。

Collapse

摺疊參數配置,可以按照某一列對結果集做摺疊(去重)。FieldName 為列名,只支援整型、浮點數和 Keyword 類型的列。

Sort

返回結果的排序方式。更多資訊,請參見查詢時指定排序方式。如果未設定排序方式,則按照預排序方式返回;如果未設定預排序,則按照主鍵排序返回。

GetTotalCount

是否返回匹配的總行數,預設為 false。返回匹配的總行數會影響查詢效能。

Token

當符合查詢條件的資料未讀取完時,服務端會返回 Token 值,此時可以使用 Token 繼續讀取後面的資料。首次讀取資料時,Token 值需要設定為 null。

Query

查詢類型。多元索引支援全匹配查詢(MatchAllQuery)、匹配查詢(MatchQuery)、短語匹配查詢(MatchPhraseQuery)、精確查詢(TermQuery)、多詞精確查詢(TermsQuery)、首碼查詢(PrefixQuery)等查詢方式,根據業務需求選擇。

Aggregations

統計彙總功能配置,可以實現求最小值、求最大值、求和、求平均值、統計行數、去重統計行數等功能。

  • Name:統計彙總功能類型,例如 min、max、sum、avg、count 等。

  • Aggregation:統計彙總參數配置,包含 AggName(自訂的統計彙總名稱)、Field(用於統計彙總的欄位)和 MissingValue(欄位為空白時的預設值)。

樣本

使用 search_index 多元索引查詢表中的資料,並返回所有建立索引的列。

search -n search_index --return_all_indexed

根據系統提示輸入查詢條件。以下樣本查詢 uid 精確匹配 10001 的資料,並對 pid 列求平均值。

{
    "Offset": -1,
    "Limit": 10,
    "Collapse": null,
    "Sort": null,
    "GetTotalCount": true,
    "Token": null,
    "Query": {
        "Name": "TermQuery",
        "Query": {
            "FieldName": "uid",
            "Term": 10001
        }
    },
    "Aggregations": [{
        "Name": "avg",
        "Aggregation": {
            "AggName": "agg1",
            "Field": "pid"
        }
    }]
}

刪除多元索引

drop_search_index -n <indexName> -y

參數

必填

說明

-n,--name

多元索引名稱。

-t,--table

資料表名稱。已通過use選定資料表時可省略。

-y,--yes

確認刪除。命令中必須帶有此參數。

樣本

刪除 search_index 多元索引。

drop_search_index -n search_index -y