クエリリクエストを開始するときに、強調表示機能を有効にすることができます。この場合、クエリ条件を満たす結果のキーワードが強調表示されます。Text フィールドのみが強調表示機能をサポートしています。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
使用上の注意
Tablestore SDK for Node.js V5.5.0 以降は、強調表示機能をサポートしています。強調表示機能を使用する前に、Tablestore SDK for Node.js V5.5.0 以降を取得していることを確認してください。 Tablestore SDK for Node.js のバージョン履歴については、Tablestore SDK for Node.js のバージョン履歴を参照してください。
一致クエリまたは一致フレーズクエリで強調表示機能を有効にすると、クエリ結果のクエリ文字列は、複数の開始タグ (preTag) と終了タグ (postTag) を使用して強調表示される場合があります。
Text フィールドのトークン化方法が最大意味単位ベースのトークン化 (MaxWord) の場合、Text フィールドで一致フレーズクエリを実行するときに強調表示機能はサポートされません。
複数のフラグメントを返す場合、フラグメント内のクエリ文字列が分割される場合があります。この場合、クエリ文字列は強調表示されない場合があります。
パラメーター
パラメーター | 説明 | |
highlightEncoder | 強調表示されたテキストフラグメントのエンコード方法。有効な値:
| |
fieldHighlightParams | フィールドの強調表示設定。このパラメーターは、SearchQuery オブジェクトで指定されたクエリ文字列を含むフィールドに対してのみ構成できます。 | |
HighlightParameter | numberOfFragments | 返される強調表示されたテキストフラグメントの最大数。このパラメーターを 1 に設定することをお勧めします。 |
fragmentSize | 返される各テキストフラグメントの長さ。デフォルト値:100。 重要 返されるテキストフラグメントの実際の長さは、このパラメーターの値と異なる場合があります。 | |
preTag | クエリ文字列の強調表示に使用する開始タグ。例: | |
postTag | クエリ文字列の強調表示に使用する終了タグ。例: | |
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 // クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値: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, "");
});
/**
* クエリ条件を満たすコンテンツを表示します。
* @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 + " ");
}
});
}