在查詢資料時通過設定高亮參數,返回命中查詢詞的片段資訊並對查詢詞進行高亮顯示。僅Text類型欄位支援查詢摘要與高亮功能。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已在資料表上建立多元索引。具體操作,請參見建立多元索引。
注意事項
Table StoreNode.js SDK從5.5.0版本開始支援查詢高亮功能。使用查詢高亮功能時,請確保擷取了正確的Node.js SDK版本。關於Node.js SDK歷史迭代版本的更多資訊,請參見Node.js SDK歷史迭代版本。
在MatchQuery和MatchPhraseQuery中使用查詢高亮功能時,查詢詞可能會被多個preTag、postTag高亮顯示。
如果Text欄位的分詞類型為最大語義分詞,則使用MatchPhraseQuery功能進行資料查詢時不支援使用查詢高亮功能。
分區切分可能會將文本中的查詢詞分割,此時該查詢詞可能不會被高亮。
參數
參數 | 說明 | |
highlightEncoder | 對高亮分區原文內容的編碼方式。取值範圍如下:
| |
fieldHighlightParams | 欄位高亮參數,僅支援設定SearchQuery中包含關鍵詞查詢的欄位。 | |
HighlightParameter | numberOfFragments | 返回高亮分區的最大數量,推薦設定為1。 |
fragmentSize | 每個分區的長度。預設值100。 重要 實際返回分區的長度不會與該值嚴格相等。 | |
preTag | 查詢詞高亮的前置Tag,例如 | |
postTag | 查詢詞高亮的後置Tag,例如 | |
highlightFragmentOrder | 當高亮欄位返回多個分區時,分區的定序。
|
樣本
以下樣本用於使用MatchQuery功能查詢表中Col_Text列的值能夠匹配hangzhou shanghai
的資料,並在返回結果中對查詢詞進行高亮顯示。其中Col_Text列為Text類型。
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, //如果只為了取行數,但不需要具體資料,可以設定limit=0,即不返回任意一行資料。
query: { //設定查詢類型為MatchQuery。
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Text", //設定要匹配的列。
text: "hangzhou shanghai" //設定要匹配的值。
}
},
highlight:{
highlightEncoder:TableStore.HighlightEncoder.PLAIN_MODE,
highlightParameters:[
{
fieldName:"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 Nested結構輸出時,增加首碼以列印層次資訊。
*/
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 + " ");
}
});
}