巢狀型別查詢
前提條件
已初始化Client。具體操作,請參見初始化Tablestore Client。
已在資料表上建立多元索引。具體操作,請參見建立多元索引。
參數
|
參數 |
說明 |
|
tableName |
資料表名稱。 |
|
indexName |
多元索引名稱。 |
|
path |
嵌套欄位的路徑。例如, |
|
query |
針對嵌套欄位子列的查詢條件,支援任意查詢類型。 |
|
scoreMode |
當欄位存在多個值時,用於計算相關性得分的模式。 |
|
InnerHits |
嵌套欄位子列的配置參數,包含以下配置項:
|
樣本
單層級巢狀型別查詢樣本
以下樣本查詢 Col_Nested.Sub_Col_Keyword 值為"開心"的資料行。Col_Nested 為巢狀型別欄位,其子行包含 Sub_Col_Keyword 子列。
/**
* Col_Nested 嵌套資料樣本:'[{Sub_Col_Keyword: "開心"},{Sub_Col_Keyword: "晴天"}]'
*/
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // 僅需擷取總行數時,可將 limit 設為 0,不返回任何資料行。
query: { // 將查詢類型設定為 TableStore.QueryType.NESTED_QUERY。
queryType: TableStore.QueryType.NESTED_QUERY,
query: {
path: "Col_Nested",
query: {
queryType: TableStore.QueryType.TERM_QUERY,
query: {
fieldName: "Col_Nested.Sub_Col_Keyword",
term: "開心"
}
},
}
},
getTotalCount: true // 返回結果中的 TotalCount 表示表中資料的總行數,預設為 false(不返回)。
},
columnToGet: { // 返回列設定:RETURN_SPECIFIED(自訂欄)、RETURN_ALL(所有列)、RETURN_ALL_FROM_INDEX(多元索引中的所有列)、RETURN_NONE(不返回列)。
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});
巢狀型別查詢使用查詢摘要與高亮樣本
以下樣本使用 NestedQuery 查詢 Col_Nested 嵌套欄位中 Sub_Col_Text 子列值能夠匹配tablestore的資料行,並對返回結果中的匹配詞進行高亮顯示。
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // 僅需擷取總行數時,可將 limit 設為 0,不返回任何資料行。
query: { // 將查詢類型設定為 TableStore.QueryType.NESTED_QUERY。
queryType: TableStore.QueryType.NESTED_QUERY,
query: {
path: "Col_Nested",
query: {
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Nested.Sub_Col_Text",
text: "tablestore"
}
},
innerHits: {
sort: {
sorters: [
{
scoreSort: {
order: TableStore.SortOrder.SORT_ORDER_DESC
}
},
{
docSort: {
order: TableStore.SortOrder.SORT_ORDER_ASC
}
},
],
},
highlight: {
highlightParameters: [
{
fieldName:"Col_Nested.Sub_Col_Text",
preTag: "<b>",
postTag: "</b>",
fragmentsOrder: TableStore.HighlightFragmentOrder.TEXT_SEQUENCE,
fragmentSize: 20,
numberOfFragments: 3,
}
]
}
},
}
},
getTotalCount: true // 返回結果中的 TotalCount 表示表中資料的總行數,預設為 false(不返回)。
},
columnToGet: { // 返回列設定:RETURN_SPECIFIED(自訂欄)、RETURN_ALL(所有列)、RETURN_ALL_FROM_INDEX(多元索引中的所有列)、RETURN_NONE(不返回列)。
returnType: TableStore.ColumnReturnType.RETURN_ALL
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data.rows, null, 2));
printSearchHit(data.searchHits, "");
});
/**
* 列印 searchHit 內容。
* @param searchHits searchHits 結果集
* @param prefix 嵌套結構輸出時,通過首碼標識層級資訊。
*/
function printSearchHit(searchHits, prefix) {
TableStore.util.arrayEach(searchHits, function (searchHit) {
if (searchHit.highlightResultItem != null) {
console.log(prefix + "Highlight: \n");
var strBuilder = ""
for (const [key,val] of searchHit.highlightResultItem.highlightFields.entries()) {
strBuilder += key + ":[";
strBuilder += val.fragments.join(",") + "]\n";
console.log(strBuilder);
}
}
for (const [key,val] of searchHit.searchInnerHits.entries()) {
console.log(prefix + "Path: " + key + "\n");
console.log(prefix + "InnerHit: \n");
printSearchHit(val.subSearchHits, prefix + " ");
}
});
}
常見問題
相關文檔
多元索引查詢類型包括精確查詢、多詞精確查詢、全匹配查詢、匹配查詢、短語匹配查詢、首碼查詢、範圍查詢、萬用字元查詢、多條件組合查詢、地理位置查詢、巢狀型別查詢、向量檢索和列存在性查詢,您可以選擇合適的查詢類型進行多維度資料查詢。
如果要對結果集進行排序或者翻頁,您可以使用排序和翻頁功能來實現。具體操作,請參見排序和翻頁。
如果要按照某一列對結果集做摺疊,使對應類型的資料在結果展示中只出現一次,您可以使用摺疊(去重)功能來實現。具體操作,請參見摺疊(去重)。
如果要進行資料分析,例如求最值、求和、統計行數等,您可以使用Search介面的統計彙總功能或者SQL查詢來實現。具體操作,請參見統計彙總和SQL查詢。
如果要快速匯出資料,而不關心整個結果集的順序時,您可以使用ParallelScan介面和ComputeSplits介面實現多並發匯出資料。具體操作,請參見並發匯出資料。