Java SDK 可使用虛擬列將源欄位對應為其他索引欄位類型,無需修改資料表結構或重寫資料。
前提條件
開始前,完成以下準備工作:
安裝Tablestore Java SDK並初始化用戶端。
資料表的最大版本數為 1。
資料表的資料生命週期為 -1,或者已禁止通過
UpdateRow更新資料。
注意事項
建立虛擬列時,源欄位和虛擬列必須符合以下類型轉換規則。
|
資料表欄位類型 |
虛擬欄欄位類型 |
|
String |
Keyword(含數組)、FuzzyKeyword(含數組)、Text(含數組)、Long(含數組)、Double(含數組)、Date(含數組)、IP(含數組)、Geo-point(含數組) |
|
Long |
Keyword、FuzzyKeyword、Text、Date |
|
Double |
Keyword、FuzzyKeyword、Text |
虛擬列只能用於查詢,不能通過 ColumnsToGet 返回欄位值。需要擷取欄位值時,請返回虛擬列映射的源欄位。
功能說明
虛擬列將資料表中的源欄位對應為另一種索引欄位類型。可以在建立多元索引時配置虛擬列,也可以通過動態修改 Schema 為已有多元索引添加虛擬列。配置完成後,使用虛擬列名稱查詢資料。
以下樣本示範完整流程:先建立包含虛擬列的多元索引,再使用虛擬列查詢資料。
建立虛擬列
以下樣本將 Keyword 源欄位 category 映射為 Long 虛擬列,並將 Long 源欄位 price 映射為 Keyword 虛擬列。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("category_as_long", FieldType.LONG)
.setVirtualField(true)
.setSourceFieldName("category"),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("price_as_keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("price")));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
建立請求成功後,等待多元索引資料同步完成,再執行查詢。
使用虛擬列查詢資料
以下樣本查詢 price_as_keyword 虛擬列等於字串 1000 的資料,並返回來源資料表中的列。
String tableName = "example_table";
String indexName = "example_index";
TermsQuery query = new TermsQuery();
query.setFieldName("price_as_keyword");
query.addTerm(ColumnValue.fromString("1000"));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(query);
searchQuery.setGetTotalCount(true);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
參數說明
FieldSchema 包含以下定義虛擬列所需的參數。其他索引欄位參數請參見建立多元索引。
|
名稱 |
類型 |
說明 |
|
fieldName(必選) |
|
虛擬列名稱,不能與索引中的其他欄位重名。 |
|
fieldType(必選) |
|
虛擬列的索引欄位類型,必須符合支援的類型轉換規則。 |
|
isVirtualField(必選) |
|
設定為 |
|
sourceFieldNames(必選) |
|
虛擬列映射的源欄位名稱列表。當前僅支援一個源欄位,通過 |