全部產品
Search
文件中心

Tablestore:多元索引

更新時間:Jul 23, 2024

建立資料表後,您可以通過Tablestore CLI建立多元索引、查看多元索引列表、查看多元索引資訊、使用多元索引查詢資料以及刪除多元索引。

建立多元索引

建立一個多元索引。

命令格式

create_search_index -n search_index_name

配置項說明請參見下表。

配置項

是否必填

樣本值

說明

-i,--input

/tmp/indexschema.json

通過JSON格式的檔案配置多元索引Schema。

-n,--name

search_index

多元索引名稱。

-t,--table

mytable

資料表名稱。

--ttl

-1

資料生命週期(TTL),即資料的儲存時間。當資料的儲存時間超過設定的資料生命週期時,系統會自動清理超過資料生命週期的資料。預設值為-1。

資料生命週期至少為86400秒(一天)或-1(資料永不到期)。

重要

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

樣本

建立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": "uid",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col2",
            "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
        },
        {
            "FieldName": "col1",
            "FieldType": "KEYWORD",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col3V",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": true,
            "SourceFieldNames": [
                "col3"
            ]
        }
    ]
}

多元索引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和DelimitWord設定。

    • CaseSensitive:是否大小寫敏感。預設是false,此時所有英文字母會轉換為小寫。如果不需要系統自動將英文字母轉換為小寫字母,需要保持大小寫敏感,請設定CaseSensitive為true。

    • DelimitWord:對於英文和數字串連在一起的單詞是否分割英文和數字。預設是false,此時英文和數字串連在一起不會拆分。如果需要將數字和英文拆分開,請設定DelimitWord參數為true。

  • EnableSortAndAgg(可選):是否開啟排序與統計彙總功能,類型為Boolean。

    只有EnableSortAndAgg設定為true的欄位才能進行排序。關於排序的更多資訊,請參見排序和翻頁

    重要

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

  • Store(可選):是否在多元索引中附加儲存該欄位的值,類型為Boolean。

    開啟後,可以直接從多元索引中讀取該欄位的值,而不必反查資料表,可用於查詢效能最佳化。

  • IsVirtualField(可選):該列是否為虛擬列,類型為Boolean類型,預設值為false。只有使用虛擬列時,才需要設定此參數。關於虛擬列的更多資訊,請參見虛擬列

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

IndexSort

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

重要

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

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

  • Name:排序方式,取值範圍如下:

    • PrimaryKeySort表示按照主鍵排序。

    • FieldSort表示按照欄位值排序。

      只有建立索引且開啟排序與統計彙總功能的欄位才能進行預排序。

  • Sorter:包含如下設定:

    當排序方式為主鍵排序時只需要Order。當排序方式為欄位名排序時需要設定FieldName和Order。

    • FieldName:排序的欄位名。

    • Order:排序的順序,可按升序(ASC)或者降序(DESC)排序,預設為ASC。

查看多元索引列表

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

命令格式

list_search_index

配置項說明請參見下表。

配置項

是否必填

樣本值

說明

-a,--all

不涉及

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

-d,--detail

不涉及

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

-t,--table

mytable

資料表名稱。

樣本

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

list_search_index

返回結果如下:

+-----------+--------------+
| TableName | IndexName    |
+-----------+--------------+
| mytable   | search_index |
+-----------+--------------+

查看多元索引資訊

查看多元索引的資訊。

命令格式

describe_search_index -n search_index_name

配置項說明請參見下表。

配置項

是否必填

樣本值

說明

-n,--name

search_index

多元索引名稱。

-o,--output

/tmp/describeinfo.json

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

-t,--table

mytable

資料表名稱。

樣本

查看search_index多元索引的資訊。

describe_search_index -n search_index

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

使用多元索引查詢資料

使用多元索引查詢滿足指定條件的資料,並對資料進行統計彙總操作。

命令格式

search -n search_index_name --return_all_indexed

配置項說明請參見下表。

配置項

是否必填

樣本值

說明

-c,--column

col1,col2

要返回的列。多個列之間用半形逗號(,)分隔。

-n,--name

search_index

多元索引名稱。

-f,--print_format

table

輸出結果的列印格式,預設值為table。

--return_all

不涉及

返回所有列。

--return_all_indexed

不涉及

返回所有多元索引中建立索引的列。

-t,--table

mytable

資料表名稱。

樣本

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

search -n search_index --return_all_indexed

根據系統提示輸入查詢條件,樣本如下:

{
    "Offset": -1,
    "Limit": 10,
    "Collapse": null,
    "Sort": null,
    "GetTotalCount": true,
    "Token": null,
    "Query": {
        "Name": "BoolQuery",
        "Query": {
            "MinimumShouldMatch": null,
            "MustQueries": null,
            "MustNotQueries": null,
            "FilterQueries": null,
            "ShouldQueries": [{
                "Name": "RangeQuery",
                "Query": {
                    "FieldName": "gid",
                    "From": null,
                    "To": 10,
                    "IncludeLower": false,
                    "IncludeUpper": false
                }
            }, {
                "Name": "TermQuery",
                "Query": {
                    "FieldName": "gid",
                    "Term": "77"
                }
            }]
        }
    },
    "Aggregations": [{
        "Name": "avg",
        "Aggregation": {
            "AggName": "agg1",
            "Field": "gid",
            "MissingValue": null
        }
    }]
}

配置項說明請參見下表。

參數

是否必填

說明

Offset

本次查詢的開始位置。

Limit

本次查詢需要返回的最大數量。

如果要隨機擷取幾行資料,請設定limit為正整數。

如果只為了擷取行數,無需具體資料,可以設定limit=0,即不返回任意一行資料。

Collapse

摺疊參數配置,可以按照某一列對結果集做摺疊,使對應類型的資料在結果展示中只出現一次,保證結果展示中類型的多樣性。更多資訊,請參見摺疊(去重)

FieldName:列名,按該列對結果集做摺疊,只支援應用於整型、浮點數和Keyword類型的列,不支援數群組類型的列。

Sort

返回結果的排序方式。更多資訊,請參見查詢時指定排序方式

如果查詢資料未設定排序方式,則查詢結果會按照預排序方式返回;如果建立多元索引時未設定預排序,則查詢結果會按照主鍵排序返回。

GetTotalCount

是否返回匹配的總行數,預設為false,表示不返回。

返回匹配的總行數會影響查詢效能。如果要返回匹配的總行數,請設定GetTotalCount為true。

Token

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

Query

查詢類型。多元索引支援全匹配查詢(MatchAllQuery)、匹配查詢(MatchQuery)、短語匹配查詢(MatchPhraseQuery)、精確查詢(TermQuery)、多詞精確查詢(TermsQuery)、首碼查詢(PrefixQuery)等多種查詢方式,請根據實際設定。更多資訊,請參見使用SDK查詢資料

Aggregations

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

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

  • Aggregation:統計彙總參數配置。包含如下配置:

    • AggName:自訂的統計彙總名稱,用於區分不同的統計彙總。

    • Field:用於統計彙總的欄位。

    • MissingValue:當某行資料中的欄位為空白時,欄位值的預設值。如果未設定MissingValue值,則在統計彙總時會忽略該行;如果設定了MissingValue值,則使用MissingValue值作為欄位值的預設值參與統計彙總。

刪除多元索引

刪除不需要的多元索引。

命令格式

drop_search_index -n search_index_name -y

配置項說明請參見下表。

配置項

是否必填

樣本值

說明

-n,--name

search_index

多元索引名稱。

-t,--table

mytable

資料表名稱。

-y,--yes

不涉及

顯示確認資訊。命令中必須帶有此配置項。

樣本

刪除search_index多元索引。

drop_search_index -n search_index -y