首碼查詢

更新時間:
Copy as MD

首碼查詢(PrefixQuery)用於尋找多元索引中欄位值以指定字串開頭的資料行。

功能概述

PrefixQuery 根據指定的首碼值匹配列中的資料。查詢行為取決於列的資料類型:

  • Keyword:基礎字串類型。隨著資料規模增大,查詢效能會持續下降,僅適合小規模資料集。

  • FuzzyKeyword:專為首碼查詢等模糊查詢最佳化的資料類型。無論資料規模大小,查詢效能均保持穩定。適用於大多數首碼查詢情境。

  • Text:列值在建立索引前會經過分詞處理。當分詞結果中至少有一個詞條滿足首碼條件時,該行被命中。由於分詞存在不確定性,首碼查詢結果不可預測,僅為相容性支援,請謹慎使用。

如何選擇資料類型

下表匯總了各資料類型在首碼查詢情境下的適用性:

資料類型

首碼查詢效能

是否推薦

Keyword

隨資料規模下降

僅限小規模資料集

FuzzyKeyword

資料規模不影響效能

推薦,適用於大多數情境

Text

分詞導致結果不可預測

不推薦

首碼匹配樣本

假設某列中儲存以下值:hangzhoubeijingshanghaiharbin

  • 首碼 hang:匹配 hangzhou,不匹配 beijingshanghaiharbin

  • 首碼 ha:同時匹配 hangzhouharbin

介面

首碼查詢的介面為Search或者ParallelScan,具體的 Query 類型為PrefixQuery

參數

參數

說明

query

查詢類型,設定為 PrefixQuery。

fieldName

目標列的名稱。

prefix

首碼值,用於與列值進行匹配。

對於 Text 類型列,匹配前會先對列值分詞,分詞結果中至少有一個詞條滿足首碼條件即視為命中。

getTotalCount

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

設定為 true 會增加查詢延遲。

weight

查詢權重,正浮點數。用於全文檢索索引情境中調整該列對 BM25 相關性得分的貢獻,值越大,該列對排名的影響越大。

此參數不影響返回的結果集,隻影響結果中各行的 BM25 得分。

tableName

資料表名稱。

indexName

多元索引名稱。

columnsToGet

指定返回的列,通過 returnAll 和 columns 配置。

returnAll 預設為 false。未設定 columns 時,僅返回主鍵列;設定 columns 後,僅返回指定列。

將 returnAll 設定為 true 時,返回所有列。

使用方式

支援通過控制台、命令列工具或SDK執行首碼查詢。執行前,請完成以下準備工作。

重要

基於 FuzzyKeyword 類型的 PrefixQuery 目前僅支援通過Table StoreSDK實現,控制台和命令列工具僅支援 Keyword 類型。

使用控制台

  1. 進入索引管理頁簽。

    1. 登入Table Store控制台

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

    3. 概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理

    4. 執行個體詳情頁簽下的資料表列表頁簽,單擊資料表名稱或在操作列單擊索引管理

  2. 索引管理頁簽,單擊目標多元索引操作列的搜尋

  3. 查詢數據對話方塊中設定查詢條件。

    1. 系統預設返回所有列,如需顯示指定屬性列,關閉擷取所有列並輸入需要返回的屬性列,多個屬性列之間用半形逗號(,)隔開。

      說明

      系統預設會返回資料表的主鍵列。

    2. 根據需要選擇邏輯操作符為 AndOr 或者 Not

      當選擇邏輯操作符為 And 時,返回滿足指定條件的資料。當選擇邏輯操作符為 Or 時,如果配置了單個條件,則返回滿足指定條件的資料;如果配置了多個條件,則返回滿足任意一個條件的資料。當選擇邏輯操作符為 Not 時,返回不滿足指定條件的資料。

    3. 選擇索引欄位,單擊添加

    4. 將查詢類型設定為首碼查詢(PrefixQuery),並輸入首碼值。

    5. 系統預設關閉排序功能,如需根據指定欄位對返回結果進行排序,開啟是否排序開關後,根據需要添加要進行排序的欄位並配置排序方式。

    6. 系統預設關閉統計功能,如需對指定欄位進行資料統計,開啟是否統計開關後,根據需要添加要進行統計的欄位和配置統計資訊。

  4. 單擊確定

    符合查詢條件的資料會顯示在索引管理頁簽中。

使用命令列工具

通過命令列工具執行search命令使用多元索引查詢資料。更多資訊,請參見多元索引

重要

命令列工具僅支援 Keyword 類型的 PrefixQuery,不支援 FuzzyKeyword 類型。

  1. 執行search命令,使用 search_index 多元索引查詢資料並返回所有建立索引的列。

    search -n search_index --return_all_indexed
  2. 根據系統提示輸入查詢條件,樣本如下:

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "PrefixQuery",
            "Query": {
                "FieldName": "col_keyword",
                "Prefix": "hangzhou"
            }
        }
    }

使用 SDK

首碼查詢支援通過Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK實現。以下以 Java SDK為例。

說明

實際使用時,不論是Keyword類型還是FuzzyKeyword類型,查詢語句是完全相同的,只是查詢列的類型不同。

以下樣本用於查詢表中Col_Keyword列的值中首碼為"hangzhou"的資料。

/**
 * 查詢表中Col_Keyword列中首碼為"hangzhou"的資料。
 * @param client
 */
private static void prefixQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    PrefixQuery prefixQuery = new PrefixQuery(); //設定查詢類型為PrefixQuery。
    searchQuery.setGetTotalCount(true);
    prefixQuery.setFieldName("Col_Keyword");
    prefixQuery.setPrefix("hangzhou");
    searchQuery.setQuery(prefixQuery);
    //searchQuery.setGetTotalCount(true); //設定返回匹配的總行數。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    //通過設定columnsToGet參數可以指定返回的列或返回所有列,如果不設定此參數,則預設只返回主鍵列。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); //設定為返回所有列。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); //設定為返回指定列。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); //列印匹配到的總行數,非返回行數。
    System.out.println("Row: " + resp.getRows());
}

計費說明

使用多元索引查詢資料時會消耗讀輸送量。更多資訊,請參見多元索引計量計費

常見問題

相關文檔