前提条件
已初始化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接口实现多并发导出数据。具体操作,请参见并发导出数据。