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

Tablestore:クエリ結果の強調表示

最終更新日:Dec 28, 2024

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

前提条件

使用上の注意

  • 一致クエリまたは一致フレーズクエリで強調表示機能を有効にした場合、クエリ結果内のクエリ文字列は、複数の開始タグ (preTag) と終了タグ (postTag) を使用して強調表示される場合があります。

  • Text フィールドのトークン化方式が最大意味単位ベースのトークン化 (MaxWord) の場合、Text フィールドに対して一致フレーズクエリを実行するときに強調表示機能はサポートされません。

  • 複数のフラグメントを返す場合、フラグメント内のクエリ文字列が分割される場合があります。この場合、クエリ文字列は強調表示されない場合があります。

パラメーター

パラメーター

説明

HighlightEncoder

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

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

  • HTML: 強調表示されたテキストフラグメントに対して 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 型です。

func MatchQuerywithHighlight(client *tablestore.TableStoreClient, tableName string, indexName string) {
    searchRequest := &tablestore.SearchRequest{}
    searchRequest.SetTableName(tableName)
    searchRequest.SetIndexName(indexName)
    query := &search.MatchQuery{} // クエリタイプを MatchQuery に設定します。
    query.FieldName = "Col_Text"  // 一致させるフィールドを指定します。
    query.Text = "hangzhou shanghai"  // 一致させるキーワードを指定します。
    searchQuery := search.NewSearchQuery()
    searchQuery.SetQuery(query)
    highlight := &search.Highlight{
        FieldHighlightParameters: map[string]*search.HighlightParameter{
            "Col_Text": {
                NumberOfFragments: proto.Int32(5),
                PreTag:            proto.String("<b>"),
                PostTag:           proto.String("</b>"),
            },
        },
    }
    searchQuery.SetHighlight(highlight)
    searchQuery.SetGetTotalCount(true)
    searchQuery.SetOffset(0) // Offset パラメーターを 0 に設定します。
    searchQuery.SetLimit(20) // Limit パラメーターを 20 に設定します。これは、最大 20 行を返すことを指定します。
    searchRequest.SetSearchQuery(searchQuery)
    // 検索インデックス内のすべてのフィールドが返されるように指定します。
    searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
        ReturnAllFromIndex: true,
    })

    if resp, err := client.Search(searchRequest); err != nil {
        fmt.Println("クエリを強調表示できませんでした: ", err)
    } else {
        fmt.Println("RequestId: " + resp.RequestId)
        // 強調表示されたクエリ結果を表示します。非ネストフィールドをクエリする場合、padding パラメーターを null に設定できます。
        printSearchHit(resp.SearchHits, " ")
    }
    fmt.Println("強調表示クエリが完了しました")
}

/**
 * クエリ条件を満たすコンテンツを表示します。
 * @param searchHits searchHits
 * 出力が @param prefix ネスト構造を使用する場合、階層情報を表示するためにプレフィックスを追加します。
 */
func printSearchHit(searchHits []*tablestore.SearchHit, padding string) {
    for _, searchHit := range searchHits {
        if searchHit.Score != nil {
            fmt.Printf("%sScore: %f\n", padding, *searchHit.Score)
        }

        if searchHit.Row != nil {
            jsonBody, err := json.Marshal(*searchHit.Row)
            if err != nil {
                panic(err)
            }
            fmt.Println("Row: ", string(jsonBody))
        }

        if searchHit.HighlightResultItem != nil && len(searchHit.HighlightResultItem.HighlightFields) != 0 {
            fmt.Printf("%sHighlight: \n", padding)
            for colName, highlightResult := range searchHit.HighlightResultItem.HighlightFields {
                fmt.Printf("%sColumnName: %s, Highlight_Fragments: %v\n", padding+padding, colName, highlightResult.Fragments)
            }
        }

        fmt.Println("")
    }
}

関連情報

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

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