日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

創(chuàng)建多元索引

通過控制臺(tái)、命令行或SDK您可以為某一個(gè)表創(chuàng)建一個(gè)或多個(gè)多元索引,然后使用多元索引對(duì)表中的數(shù)據(jù)進(jìn)行查詢和簡單分析。

最佳使用方式

請(qǐng)根據(jù)實(shí)際查詢需求確定在一張數(shù)據(jù)表中創(chuàng)建多元索引的個(gè)數(shù)。

例如一張數(shù)據(jù)表有5個(gè)字段,分別為id、name、age、city、sex,需要按照name、age或city查詢數(shù)據(jù)時(shí),有兩種創(chuàng)建多元索引的方式。

  • 方法一:一個(gè)字段建立一個(gè)多元索引

    按照name、age或city字段分別創(chuàng)建多元索引,名稱分別為name_index、age_index、city_index。

    • 如果按照城市查詢學(xué)生,則查詢city_index,如果按照年齡查詢學(xué)生,則查詢age_index。

    • 如果查詢年齡小于12歲且城市是成都的學(xué)生,此種方式就無法查詢。

    此方式的實(shí)現(xiàn)類似于全局二級(jí)索引,使用此方式創(chuàng)建多元索引會(huì)帶來更高的費(fèi)用,因此不建議使用此方式創(chuàng)建多元索引。

  • 方法二(推薦):多個(gè)字段創(chuàng)建在一個(gè)多元索引中

    將name、age和city字段創(chuàng)建在一個(gè)多元索引中,名稱為student_index。

    • 如果按照城市查詢學(xué)生,則查詢student_index中city字段;如果按照年齡查詢學(xué)生,則查詢student_index中age字段。

    • 如果查詢年齡小于12歲且城市是成都的學(xué)生,則查詢student_index中age和city字段。

    此方式才能發(fā)揮多元索引最大優(yōu)勢(shì),不僅功能更豐富,而且價(jià)格會(huì)更低。極力推薦使用此方式創(chuàng)建多元索引。

使用限制

  • 創(chuàng)建索引的時(shí)效性

    創(chuàng)建多元索引后,需要等幾秒鐘才能使用,但是此過程中不影響數(shù)據(jù)寫入,只影響索引元信息的查詢和索引查詢。

  • 創(chuàng)建多元索引時(shí),請(qǐng)確保多元索引中的字段類型與表中的字段類型相匹配。更多信息,請(qǐng)參見基礎(chǔ)數(shù)據(jù)類型及映射

  • 數(shù)量限制

    更多信息,請(qǐng)參見多元索引限制

參數(shù)

創(chuàng)建多元索引時(shí),需要指定數(shù)據(jù)表名稱(tableName)、多元索引名稱(indexName)和索引的結(jié)構(gòu)信息(indexSchema),其中indexSchema包含fieldSchemas(Index所有字段的設(shè)置)、indexSetting(索引設(shè)置)和indexSort(索引預(yù)排序設(shè)置)。詳細(xì)參數(shù)說明請(qǐng)參見下表。

參數(shù)

說明

tableName

數(shù)據(jù)表名稱。

indexName

多元索引名稱。

fieldSchemas

索引字段列表,每個(gè)fieldSchema包含如下內(nèi)容:

  • fieldName(必選):創(chuàng)建多元索引的字段名,即列名,類型為String。

    多元索引中的字段可以是主鍵列或者屬性列。

  • fieldType(必選):字段類型,類型為FieldType.XXX。更多信息,請(qǐng)參見基礎(chǔ)數(shù)據(jù)類型及映射

  • isArray(可選):是否為數(shù)組,類型為Boolean。

    如果設(shè)置為true,則表示該列是一個(gè)數(shù)組,在寫入時(shí),必須按照J(rèn)SON數(shù)組格式寫入,例如["a","b","c"]。

    由于Nested類型是一個(gè)數(shù)組,當(dāng)fieldType為Nested類型時(shí),無需設(shè)置此參數(shù)。

  • analyzer(可選):分詞器類型。當(dāng)字段類型為Text時(shí),可以設(shè)置此參數(shù);如果不設(shè)置此參數(shù),則默認(rèn)分詞器類型為單字分詞。關(guān)于分詞的更多信息,請(qǐng)參見分詞

  • isVirtualField(可選):該字段是否為虛擬列,類型為Boolean。默認(rèn)值為false,表示字段不是虛擬列。如果要使用虛擬列,請(qǐng)?jiān)O(shè)置此參數(shù)為true。關(guān)于虛擬列的更多信息,請(qǐng)參見虛擬列

  • sourceFieldName(可選):數(shù)據(jù)表中的字段名稱,類型為String。當(dāng)設(shè)置isVirtualField為true時(shí),必須設(shè)置此參數(shù)。

  • dateFormats(可選):日期的格式,類型為String。當(dāng)字段類型為Date時(shí),必須設(shè)置此參數(shù)。更多信息,請(qǐng)參見日期時(shí)間類型

  • enableHighlighting(可選):是否開啟查詢高亮功能,類型為Boolean。默認(rèn)值為false,表示不開啟查詢高亮。如果要使用查詢高亮,請(qǐng)?jiān)O(shè)置此參數(shù)為true。僅Text類型字段支持查詢高亮功能。關(guān)于查詢高亮的更多信息,請(qǐng)參見查詢高亮

    重要

    目前此參數(shù)只支持通過表格存儲(chǔ)SDK進(jìn)行配置。

  • enableSortAndAgg(可選):是否開啟排序與統(tǒng)計(jì)聚合功能,類型為Boolean。默認(rèn)值為true,表示開啟排序與統(tǒng)計(jì)聚合。

    只有enableSortAndAgg設(shè)置為true的字段才能進(jìn)行排序。關(guān)于排序的更多信息,請(qǐng)參見排序和翻頁

    重要
    • 目前此參數(shù)只支持通過表格存儲(chǔ)SDK進(jìn)行配置。

    • TEXT類型的字段不支持排序和統(tǒng)計(jì)聚合。如果Text類型的字段同時(shí)需要進(jìn)行排序或統(tǒng)計(jì)聚合,可以通過虛擬列為Keyword類型實(shí)現(xiàn)。具體操作,請(qǐng)參見虛擬列

  • vectorOptions(可選):向量字段類型的屬性參數(shù)。當(dāng)字段類型為Vector時(shí),必須設(shè)置此參數(shù)。包括如下內(nèi)容:

    • dataType:向量數(shù)據(jù)類型。當(dāng)前僅支持float32。如果有其他類型需求,請(qǐng)提交工單聯(lián)系我們。

    • dimension:向量維度。關(guān)于維度限制說明請(qǐng)參見多元索引限制

    • metricType:向量之間距離度量的算法,支持歐氏距離(euclidean)、余弦相似度(cosine)、點(diǎn)積(dot_product)。

      • 歐氏距離(euclidean):多維空間中兩個(gè)向量之間的直線距離。出于性能考慮,表格存儲(chǔ)中的歐氏距離算法未進(jìn)行最后的平方根計(jì)算。歐氏距離的評(píng)分越大表示兩個(gè)向量的相似度越大。

      • 余弦相似度(cosine):向量空間中兩個(gè)向量間夾角的余弦值。余弦相似度的評(píng)分越高表示兩個(gè)向量的相似度越大。常用于文本數(shù)據(jù)的相似度計(jì)算。

      • 點(diǎn)積(dot_product):維度相同的兩個(gè)向量的對(duì)應(yīng)坐標(biāo)相乘,然后將結(jié)果相加。點(diǎn)積的評(píng)分越高標(biāo)識(shí)兩個(gè)向量的相似度越大。

      關(guān)于如何選用距離度量算法的更多信息,請(qǐng)參見附錄:距離度量算法說明

indexSetting

索引設(shè)置,包含routingFields設(shè)置。

routingFields(可選):自定義路由字段。可以選擇部分主鍵列作為路由字段,在進(jìn)行索引數(shù)據(jù)寫入時(shí),會(huì)根據(jù)路由字段的值計(jì)算索引數(shù)據(jù)的分布位置,路由字段的值相同的記錄會(huì)被索引到相同的數(shù)據(jù)分區(qū)中。

indexSort

索引預(yù)排序設(shè)置,包含sorters設(shè)置。如果不設(shè)置,則默認(rèn)按照主鍵排序。

說明

含有Nested類型的索引不支持indexSort,沒有預(yù)排序。

sorters(可選):索引預(yù)排序方式的列表,支持按照主鍵排序和字段值排序。更多信息,請(qǐng)參見排序和翻頁

timeToLive

可選參數(shù)。數(shù)據(jù)生命周期(TTL),即數(shù)據(jù)的保存時(shí)間,單位為秒。

默認(rèn)值為-1,表示數(shù)據(jù)永不過期。數(shù)據(jù)生命周期的取值最低為86400秒(一天),也可設(shè)置為-1(永不過期)。

當(dāng)數(shù)據(jù)的保存時(shí)間超過設(shè)置的數(shù)據(jù)生命周期時(shí),系統(tǒng)會(huì)自動(dòng)清理超過數(shù)據(jù)生命周期的數(shù)據(jù)。

多元索引生命周期的使用方式,請(qǐng)參見生命周期管理

注意事項(xiàng)

  • 當(dāng)要實(shí)現(xiàn)全文檢索時(shí),您可以在多元索引中將字段設(shè)置為可分詞字符串(TEXT)類型并為TEXT類型的字段設(shè)置分詞,然后使用匹配查詢短語匹配查詢功能查詢數(shù)據(jù)。關(guān)于分詞的更多信息,請(qǐng)參見分詞

  • 在不修改表格存儲(chǔ)的存儲(chǔ)結(jié)構(gòu)及數(shù)據(jù)的情況下,當(dāng)要實(shí)現(xiàn)新字段和新數(shù)據(jù)類型的查詢功能時(shí),您可以在多元索引中將字段設(shè)置為虛擬列。更多信息,請(qǐng)參見虛擬列

  • 當(dāng)要使用日期數(shù)據(jù)類型進(jìn)行數(shù)據(jù)查詢時(shí),您可以在多元索引中將數(shù)據(jù)表中的整型(Integer)或字符串(String)類型的數(shù)據(jù)映射為日期數(shù)據(jù)類型。更多信息,請(qǐng)參見日期時(shí)間類型

  • 當(dāng)要使用數(shù)值向量進(jìn)行近似最近鄰查詢時(shí),您可以在多元索引中將字段設(shè)置為向量類型,然后使用向量檢索介紹與使用功能查詢數(shù)據(jù)。

  • 當(dāng)要使用數(shù)組類型存儲(chǔ)數(shù)據(jù)時(shí),您可以在數(shù)據(jù)表中以String類型字段存儲(chǔ)數(shù)據(jù),然后在多元索引中將字段設(shè)置為數(shù)組。

    在寫入數(shù)據(jù)到數(shù)據(jù)表中時(shí),數(shù)組類型字段的值必須按照J(rèn)SON數(shù)組格式寫入,例如["a","b","c"]。

    說明

    數(shù)組類型僅是多元索引中的概念,數(shù)據(jù)表中還不支持?jǐn)?shù)組。更多信息,請(qǐng)參見數(shù)組和嵌套類型

  • 當(dāng)要使用單字段存儲(chǔ)存在層次關(guān)系或者一對(duì)多關(guān)系的數(shù)據(jù)時(shí),您可以在多元索引中將字段設(shè)置為嵌套類型,然后使用嵌套類型查詢功能查詢數(shù)據(jù)。

    在寫入數(shù)據(jù)到數(shù)據(jù)表中時(shí),嵌套類型字段的值必須按照J(rèn)SON數(shù)組格式寫入,例如[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]

  • 當(dāng)要存儲(chǔ)的數(shù)據(jù)為地理位置信息時(shí),您可以在多元索引中將字段設(shè)置為地理位置(Geo-point)類型,然后使用地理距離查詢地理長方形范圍查詢地理多邊形范圍查詢功能查詢數(shù)據(jù)。

  • 系統(tǒng)默認(rèn)使用分區(qū)鍵作為路由鍵,當(dāng)要使用其他主鍵列作為路由鍵來定向搜索指定數(shù)據(jù)分區(qū),以減少長尾對(duì)延遲的影響時(shí),您可以修改路由字段配置。更多信息,請(qǐng)參見多元索引路由字段的使用

  • 多元索引默認(rèn)按照主鍵升序的排序方式返回查詢結(jié)果,當(dāng)要按照指定字段值或主鍵降序進(jìn)行預(yù)排序時(shí),您可以修改預(yù)排序方式。更多信息,請(qǐng)參見索引預(yù)排序

  • 當(dāng)要實(shí)現(xiàn)自動(dòng)清理多元索引中的歷史數(shù)據(jù)時(shí),您可以使用多元索引的數(shù)據(jù)生命周期(TTL)功能有效地管理數(shù)據(jù),減少數(shù)據(jù)存儲(chǔ)空間,降低存儲(chǔ)成本。更多信息,請(qǐng)參見生命周期管理

  • 當(dāng)要在查詢結(jié)果中高亮突出顯示匹配到的關(guān)鍵詞時(shí),您可以使用查詢高亮功能實(shí)現(xiàn)。更多信息,請(qǐng)參見查詢高亮

使用方式

您可以使用控制臺(tái)、命令行工具或者SDK進(jìn)行創(chuàng)建多元索引操作。

進(jìn)行多元索引創(chuàng)建之前,您需要完成如下準(zhǔn)備工作。

  • 使用阿里云賬號(hào)或者具有表格存儲(chǔ)操作權(quán)限的RAM用戶進(jìn)行操作。如果需要為RAM用戶授權(quán)表格存儲(chǔ)操作權(quán)限,請(qǐng)參見通過RAM Policy為RAM用戶授權(quán)進(jìn)行配置。

    使用SDK方式和命令行工具方式進(jìn)行操作時(shí),如果當(dāng)前無可用AccessKey,則需要為阿里云賬號(hào)或者RAM用戶創(chuàng)建AccessKey。具體操作,請(qǐng)參見創(chuàng)建AccessKey

  • 已創(chuàng)建數(shù)據(jù)表。具體操作,請(qǐng)參見數(shù)據(jù)表操作

  • 使用SDK方式進(jìn)行操作時(shí),還需要完成初始化Client。具體操作,請(qǐng)參見初始化OTSClient

  • 使用命令行工具進(jìn)行操作前,還需要完成下載并啟動(dòng)命令行工具,然后配置接入實(shí)例信息。具體操作,請(qǐng)參見下載命令行工具啟動(dòng)并配置接入信息

使用控制臺(tái)

通過控制臺(tái)創(chuàng)建一個(gè)多元索引。

  1. 進(jìn)入索引管理頁簽。

    1. 登錄表格存儲(chǔ)控制臺(tái)

    2. 在頁面上方,選擇資源組和地域。

    3. 概覽頁面,單擊實(shí)例名稱或在操作列單擊實(shí)例管理

    4. 實(shí)例詳情頁簽的數(shù)據(jù)表列表區(qū)域,單擊數(shù)據(jù)表名稱或在操作列單擊索引管理

  2. 索引管理頁簽,單擊創(chuàng)建多元索引

  3. 創(chuàng)建索引對(duì)話框,創(chuàng)建多元索引。

    image.png

    1. 系統(tǒng)默認(rèn)會(huì)自動(dòng)生成索引名,可根據(jù)需要設(shè)置索引名。

    2. 選擇Schema生成方式。

      重要

      字段名字段類型需與數(shù)據(jù)表匹配。數(shù)據(jù)表字段類型與多元索引字段類型的對(duì)應(yīng)關(guān)系請(qǐng)參見基礎(chǔ)數(shù)據(jù)類型及映射

      • 當(dāng)設(shè)置Schema生成方式手動(dòng)錄入時(shí),手動(dòng)輸入字段名,選擇字段類型以及設(shè)置是否開啟數(shù)組。

      • 當(dāng)設(shè)置Schema生成方式自動(dòng)生成時(shí),系統(tǒng)會(huì)自動(dòng)將數(shù)據(jù)表的主鍵列和屬性列作為索引字段,可根據(jù)需要選擇字段類型以及設(shè)置是否開啟數(shù)組。

      說明

      在部分情況下如果要優(yōu)化性能,則可以使用虛擬列。關(guān)于虛擬列的更多信息,請(qǐng)參見虛擬列

    3. 如果需要配置數(shù)據(jù)生命周期、路由鍵、索引預(yù)排序等選項(xiàng),請(qǐng)打開高級(jí)選項(xiàng)開關(guān),并根據(jù)下表說明配置參數(shù)。

      參數(shù)

      說明

      路由鍵

      自定義路由字段。可以選擇部分主鍵列作為路由字段,在進(jìn)行索引數(shù)據(jù)寫入時(shí),表格存儲(chǔ)會(huì)根據(jù)路由字段的值計(jì)算索引數(shù)據(jù)的分布位置,路由字段的值相同的記錄會(huì)被索引到相同的數(shù)據(jù)分區(qū)中。

      數(shù)據(jù)生命周期

      多元索引中數(shù)據(jù)的保存時(shí)間,單位為秒。默認(rèn)值為-1,表示數(shù)據(jù)永不過期。

      數(shù)據(jù)生命周期的取值最低為86400秒(一天),也可設(shè)置為-1(永不過期)。同時(shí)多元索引的TTL值必須小于或等于數(shù)據(jù)表的TTL值。

      如果需要系統(tǒng)自動(dòng)清理多元索引中的歷史數(shù)據(jù),您可以配置數(shù)據(jù)生命周期為指定時(shí)間。當(dāng)數(shù)據(jù)的保存時(shí)間超過設(shè)置的數(shù)據(jù)生命周期時(shí),系統(tǒng)會(huì)自動(dòng)清理超過數(shù)據(jù)生命周期的數(shù)據(jù)。

      預(yù)排序

      多元索引默認(rèn)按照設(shè)置的索引預(yù)排序方式進(jìn)行排序,用于確定數(shù)據(jù)的默認(rèn)返回順序。

      索引預(yù)排序只支持按照主鍵排序和按照字段值排序兩種方式。如果未自定義預(yù)排序,則默認(rèn)為主鍵排序,您可以根據(jù)實(shí)際查詢場景指定預(yù)排序方式。

      重要

      含有Nested類型字段的多元索引不支持索引預(yù)排序。

  4. 單擊確定

    多元索引創(chuàng)建完成后,在索引列表的操作列,單擊索引詳情,可查看索引表的索引基本信息、索引計(jì)量、路由鍵、索引字段和預(yù)排序等信息。

使用命令行工具

通過命令行工具執(zhí)行create_search_index命令創(chuàng)建多元索引。更多信息,請(qǐng)參見多元索引

  1. 執(zhí)行create_search_index命令創(chuàng)建一個(gè)多元索引search_index。

    create_search_index -n search_index
  2. 根據(jù)系統(tǒng)提示輸入索引Schema,示例如下:

    索引Schema包括IndexSetting(索引設(shè)置)、FieldSchemas(Index的所有字段的設(shè)置)和IndexSort(索引預(yù)排序設(shè)置)。關(guān)于索引Schema的更多信息,請(qǐng)參見創(chuàng)建多元索引

     {
    
        "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"
                ]
            }
        ]
    }

使用SDK

您可以通過Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK創(chuàng)建多元索引。此處以Java SDK為例介紹創(chuàng)建多元索引的操作。

創(chuàng)建多元索引時(shí)使用默認(rèn)配置

以下示例用于創(chuàng)建一個(gè)多元索引。該多元索引包含Col_Keyword(KEYWORD類型)、Col_Long(LONG類型)和Col_Vector(VECTOR類型)三列,按照數(shù)據(jù)表主鍵進(jìn)行預(yù)排序且數(shù)據(jù)永不過期。

private static void createSearchIndex(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //設(shè)置數(shù)據(jù)表名稱。
    request.setTableName("<TABLE_NAME>"); 
    //設(shè)置多元索引名稱。
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            //設(shè)置字段名和類型。
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG),
            // 設(shè)置向量類型。
            new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true)
                    // 向量維度為4,相似度算法為點(diǎn)積。
                    .setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.DOT_PRODUCT))
    ));
    request.setIndexSchema(indexSchema);
    //調(diào)用client創(chuàng)建多元索引。
    client.createSearchIndex(request); 
}

創(chuàng)建多元索引時(shí)指定IndexSort

以下示例用于創(chuàng)建一個(gè)多元索引,多元索引包含Col_Keyword(KEYWORD類型)、Col_Long(LONG類型)、Col_Text(TEXT類型)和Timestamp(LONG類型)四列,同時(shí)配置按照Timestamp列進(jìn)行預(yù)排序。

private static void createSearchIndexWithIndexSort(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //設(shè)置數(shù)據(jù)表名稱。
    request.setTableName("<TABLE_NAME>"); 
    //設(shè)置多元索引名稱。
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            new FieldSchema("Col_Keyword", FieldType.KEYWORD),
            new FieldSchema("Col_Long", FieldType.LONG),
            new FieldSchema("Col_Text", FieldType.TEXT),
            new FieldSchema("Timestamp", FieldType.LONG)
                    .setEnableSortAndAgg(true)));
    //設(shè)置按照Timestamp列進(jìn)行預(yù)排序。
    indexSchema.setIndexSort(new Sort(
            Arrays.<Sort.Sorter>asList(new FieldSort("Timestamp", SortOrder.ASC))));
    request.setIndexSchema(indexSchema);
    //調(diào)用client創(chuàng)建多元索引。
    client.createSearchIndex(request);
}

創(chuàng)建多元索引時(shí)設(shè)置生命周期

重要

請(qǐng)確保數(shù)據(jù)表的更新狀態(tài)為禁止。

以下示例用于創(chuàng)建一個(gè)多元索引,多元索引包含Col_Keyword(KEYWORD類型)和Col_Long(LONG類型)兩列,同時(shí)指定多元索引生命周期為7天。

// 請(qǐng)使用5.12.0及以上版本的Java SDK。
public static void createIndexWithTTL(SyncClient client) {
    int days = 7;
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //設(shè)置數(shù)據(jù)表名稱。
    request.setTableName("<TABLE_NAME>");
    //設(shè)置多元索引名稱。
    request.setIndexName("<SEARCH_INDEX_NAME>");
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            //設(shè)置字段名和類型。
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG)));
    request.setIndexSchema(indexSchema);
    //設(shè)置多元索引TTL。
    request.setTimeToLiveInDays(days);
    //調(diào)用client創(chuàng)建多元索引。
    client.createSearchIndex(request);
}

創(chuàng)建多元索引時(shí)指定虛擬列

以下示例用于創(chuàng)建一個(gè)多元索引,多元索引包含Col_Keyword(KEYWORD類型)和Col_Long(LONG類型)兩列,同時(shí)創(chuàng)建虛擬列Col_Keyword_Virtual_Long(LONG類型)和Col_Long_Virtual_Keyword(KEYWORD類型)。Col_Keyword_Virtual_Long映射為數(shù)據(jù)表中Col_Keyword列,虛擬列Col_Long_Virtual_Keyword映射為數(shù)據(jù)表中Col_Long列。

private static void createSearchIndex(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //設(shè)置數(shù)據(jù)表名稱。
    request.setTableName("<TABLE_NAME>"); 
    //設(shè)置多元索引名稱。
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
        //設(shè)置字段名和類型。
        new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
        //設(shè)置字段名和類型。
        new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG) 
             //設(shè)置字段是否為虛擬列。
            .setVirtualField(true) 
             //虛擬列對(duì)應(yīng)的數(shù)據(jù)表中字段。
            .setSourceFieldName("Col_Keyword"), 
        new FieldSchema("Col_Long", FieldType.LONG),
        new FieldSchema("Col_Long_Virtual_Keyword", FieldType.KEYWORD)
            .setVirtualField(true)
            .setSourceFieldName("Col_Long")));
    request.setIndexSchema(indexSchema);
    //調(diào)用client創(chuàng)建多元索引。
    client.createSearchIndex(request); 
}

創(chuàng)建多元索引時(shí)開啟查詢高亮

以下示例用于創(chuàng)建一個(gè)多元索引,多元索引包含Col_Keyword(KEYWORD類型)、Col_Long(LONG類型)和Col_Text(TEXT類型)三列,同時(shí)為Col_Text列開啟查詢高亮功能。

private static void createSearchIndexwithHighlighting(SyncClient client) {
    CreateSearchIndexRequest request = new CreateSearchIndexRequest();
    //設(shè)置數(shù)據(jù)表名稱。
    request.setTableName("<TABLE_NAME>"); 
    //設(shè)置多元索引名稱。
    request.setIndexName("<SEARCH_INDEX_NAME>"); 
    IndexSchema indexSchema = new IndexSchema();
    indexSchema.setFieldSchemas(Arrays.asList(
            //設(shè)置字段名和類型。
            new FieldSchema("Col_Keyword", FieldType.KEYWORD), 
            new FieldSchema("Col_Long", FieldType.LONG),
            //為字段開啟查詢高亮功能。
            new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setEnableHighlighting(true)
    ));
    request.setIndexSchema(indexSchema);
    //調(diào)用client創(chuàng)建多元索引。
    client.createSearchIndex(request); 
}

后續(xù)操作

創(chuàng)建多元索引后,您可以通過多元索引進(jìn)行數(shù)據(jù)查詢、數(shù)據(jù)分析與數(shù)據(jù)導(dǎo)出。

操作

可選功能

數(shù)據(jù)查詢

請(qǐng)根據(jù)實(shí)際業(yè)務(wù)場景選擇合適的查詢方式。

當(dāng)通過Search接口查詢數(shù)據(jù)時(shí),如果要對(duì)結(jié)果集進(jìn)行排序或者翻頁,您可以使用排序和翻頁功能來實(shí)現(xiàn)。具體操作,請(qǐng)參見排序和翻頁

數(shù)據(jù)分析

統(tǒng)計(jì)聚合

數(shù)據(jù)導(dǎo)出

并發(fā)導(dǎo)出數(shù)據(jù)

相關(guān)文檔

創(chuàng)建多元索引后,請(qǐng)根據(jù)需要執(zhí)行相應(yīng)操作。

  • 如果希望清理多元索引中的歷史數(shù)據(jù)或者希望延長數(shù)據(jù)保存時(shí)間,您可以修改多元索引的數(shù)據(jù)生命周期。具體操作,請(qǐng)參見生命周期管理

  • 如果要在多元索引中新增、更新或者刪除索引列,您可以使用動(dòng)態(tài)修改schema功能實(shí)現(xiàn)。具體操作,請(qǐng)參見動(dòng)態(tài)修改schema

  • 如果要獲取某個(gè)數(shù)據(jù)表關(guān)聯(lián)的所有多元索引的列表信息,您可以使用列出多元索引列表功能實(shí)現(xiàn)。具體操作,請(qǐng)參見列出多元索引列表

  • 如果要查詢多元索引的描述信息,包括多元索引的字段信息和索引配置等,您可以使用查詢多元索引描述信息功能實(shí)現(xiàn)。具體操作,請(qǐng)參見查詢多元索引描述信息

  • 如果不再需要使用多元索引,您可以刪除多元索引。具體操作,請(qǐng)參見刪除多元索引

  • 您還可以使用SQL查詢功能或者通過MaxCompute、Spark、Hive或者HadoopMR、函數(shù)計(jì)算、Flink、PrestoDB等計(jì)算引擎計(jì)算與分析表中數(shù)據(jù)。具體操作,請(qǐng)參見SQL查詢計(jì)算與分析概述

附錄:距離度量算法說明

向量的距離度量算法說明請(qǐng)參見下表,其中評(píng)分公式的值越大表示的相似度越大。

MetricType

評(píng)分公式

性能

說明

歐氏距離

(euclidean)

較高

多維空間中兩個(gè)向量之間的直線距離。出于性能考慮,表格存儲(chǔ)中的歐氏距離算法未進(jìn)行最后的平方根計(jì)算。歐氏距離的評(píng)分越大表示兩個(gè)向量的相似度越大。

點(diǎn)積

(dot_product)

最高

維度相同的兩個(gè)向量的對(duì)應(yīng)坐標(biāo)相乘,然后將結(jié)果相加。點(diǎn)積的評(píng)分越高表示兩個(gè)向量的相似度越大。

Float32向量必須在寫入表前進(jìn)行歸一化(例如使用L2范數(shù)進(jìn)行歸一化),否則會(huì)出現(xiàn)查詢效果差、構(gòu)建向量索引慢、查詢性能差等潛在問題。

余弦相似度

(cosine)

較低

向量空間中兩個(gè)向量間夾角的余弦值。余弦相似度的評(píng)分越高表示兩個(gè)向量的相似度越大。常用于文本數(shù)據(jù)的相似度計(jì)算。

由于0無法作為除數(shù),無法完成余弦相似度的計(jì)算,因此Float32向量的平方和不允許為0

余弦相似度計(jì)算復(fù)雜,推薦您在寫入數(shù)據(jù)到表之前進(jìn)行向量的歸一化,然后使用點(diǎn)積(dot_product)作為向量距離的度量算法。

向量歸一化的示例代碼如下:

  public static float[] l2normalize(float[] v, boolean throwOnZero) {
    double squareSum = 0.0f;
    int dim = v.length;
    for (float x : v) {
      squareSum += x * x;
    }
    if (squareSum == 0) {
      if (throwOnZero) {
        throw new IllegalArgumentException("can't normalize a zero-length vector");
      } else {
        return v;
      }
    }
    double length = Math.sqrt(squareSum);
    for (int i = 0; i < dim; i++) {
      v[i] /= length;
    }
    return v;
  }