すべてのプロダクト
Search
ドキュメントセンター

Tablestore:強調表示

最終更新日:Dec 28, 2024

クエリリクエストを開始するときに、強調表示機能を有効にすることができます。この場合、クエリ条件を満たす結果のキーワードが強調表示されます。Text フィールドのみが強調表示機能をサポートしています。

前提条件

使用上の注意

  • 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

強調表示されたテキストフラグメントのエンコード方法。有効な値:

  • PLAIN_MODE:エンコードを必要とせずに、強調表示されたテキストフラグメントを表示します。これはデフォルト値です。

  • HTML_MODE:強調表示されたテキストフラグメントに対して HTML エンコードを実行します。HTML エンコードが完了すると、<&lt; に、>&gt; に、"&quot; に、'&#x27; に、/&#x2F; に変換されます。Web ページを表示する場合は、HTML 形式を使用することをお勧めします。

fieldHighlightParams

フィールドの強調表示設定。このパラメーターは、SearchQuery オブジェクトで指定されたクエリ文字列を含むフィールドに対してのみ構成できます。

HighlightParameter

numberOfFragments

返される強調表示されたテキストフラグメントの最大数。このパラメーターを 1 に設定することをお勧めします。

fragmentSize

返される各テキストフラグメントの長さ。デフォルト値:100。

重要

返されるテキストフラグメントの実際の長さは、このパラメーターの値と異なる場合があります。

preTag

クエリ文字列の強調表示に使用する開始タグ。例:<em> および <b>。デフォルト値:<em>。ビジネス要件に基づいてカスタムの開始タグを指定できます。preTag パラメーターは、次の文字セットをサポートしています:< > " ' /a-zA-Z、および 0-9

postTag

クエリ文字列の強調表示に使用する終了タグ。例:</em> および </b>。デフォルト値:</em>。ビジネス要件に基づいてカスタムの終了タグを指定できます。postTag パラメーターは、次の文字セットをサポートしています:< > " ' /a-zA-Z、および 0-9

highlightFragmentOrder

返される強調表示されたテキストフラグメントの並べ替えルール。

  • TEXT_SEQUENCE:強調表示されたテキストフラグメントは、元のテキストでの出現順に並べ替えられます。これはデフォルト値です。

  • SCORE:強調表示されたテキストフラグメントは、ヒットしたクエリ文字列のスコアに基づいて並べ替えられます。

次のサンプルコードは、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 + "    ");
        }
    });
}

参照

  • 強調表示機能の詳細については、強調表示を参照してください。

  • ネストされたフィールドをクエリするときに強調表示機能を使用する方法については、ネストクエリを参照してください。