Tablestore SDK for Java のまとめとハイライト機能を使用すると、一致した term を含む Text フィールドからフラグメントを返し、設定されたタグで term をマークできます。
前提条件
OTSClient インスタンスが初期化されています。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれています。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されています。詳細については、検索インデックスの作成を参照してください。
注意事項
-
クエリハイライト機能は、Tablestore Node.js Software Development Kit (SDK) 5.5.0 以降で利用できます。互換性のある SDK バージョンを使用していることを確認してください。Node.js SDK のリリース履歴の詳細については、「Node.js SDK リリース履歴」をご参照ください。
-
Match クエリまたは MatchPhrase クエリでクエリハイライト機能を使用する場合、検索クエリが複数の pre-tag と post-tag によってハイライトされることがあります。
-
Text フィールドが最大セマンティクストークン化を使用している場合、クエリハイライト機能は MatchPhrase クエリではサポートされません。
-
シャーディングによってソーステキスト内でクエリが分割された場合、検索クエリがハイライトされないことがあります。
パラメーター
|
パラメーター |
説明 |
|
|
highlightEncoder |
ハイライトされたフラグメントの元のコンテンツのエンコード方式。有効値:
|
|
|
fieldHighlightParams |
フィールドのハイライトパラメーター。このパラメーターは、SearchQuery 内のキーワードクエリに含まれるフィールドに対してのみ設定できます。 |
|
|
HighlightParameter |
numberOfFragments |
返されるハイライトされたフラグメントの最大数。1 に設定することを推奨します。 |
|
fragmentSize |
各フラグメントの長さ。デフォルト値: 100。 重要
返されるフラグメントの長さは、この値と正確に一致しない場合があります。 |
|
|
preTag |
検索クエリをハイライトするための pre-tag (開始タグ)。たとえば、 |
|
|
postTag |
検索クエリをハイライトするための post-tag (終了タグ)。たとえば、 |
|
|
highlightFragmentOrder |
ハイライトされたフィールドに対して複数のフラグメントが返される場合のフラグメントの並べ替えルール。
|
|
例
次の例では、一致検索を使用して、description フィールドに tablestore という term が含まれる行を取得します。この例では、返されたフラグメント内で一致した term を <b> と </b> で囲みます。description フィールドは、まとめとハイライトが有効になっている Text フィールドです。
client.search({
tableName: "<TABLE_NAME>",
indexName: "<SEARCH_INDEX_NAME>",
searchQuery: {
offset: 0,
limit: 10, // データなしで行数のみを取得するには、limit を 0 に設定します。これにより、行が返されなくなります。
query: { // クエリタイプを Match クエリに設定します。
queryType: TableStore.QueryType.MATCH_QUERY,
query: {
fieldName: "Col_Text", // 一致させる列を設定します。
text: "hangzhou shanghai" // 一致させる値を設定します。
}
},
highlight:{
highlightEncoder:TableStore.HighlightEncoder.PLAIN_MODE,
highlightParameters:[
{
fieldName:"Col_Text",
preTag: "",
postTag: "",
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, "");
});
/**
* searchHits の内容を出力します。
* @param 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 + " ");
}
});
}
関連ドキュメント
-
クエリハイライト機能の詳細については、「サマリーとハイライト」をご参照ください。
-
ネストされたフィールドでクエリハイライト機能を使用する方法については、「nested クエリ」をご参照ください。