クエリリクエストを開始する際に、強調表示機能を有効にすることができます。この場合、クエリ条件を満たす結果内のキーワードが強調表示されます。Text フィールドのみが強調表示機能をサポートしています。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
使用上の注意
一致クエリまたは一致フレーズクエリで強調表示機能を有効にした場合、クエリ結果内のクエリ文字列は、複数の開始タグ (preTag) と終了タグ (postTag) を使用して強調表示される場合があります。
Text フィールドのトークン化方式が最大意味単位ベースのトークン化 (MaxWord) の場合、Text フィールドに対して一致フレーズクエリを実行するときに強調表示機能はサポートされません。
複数のフラグメントを返す場合、フラグメント内のクエリ文字列が分割される場合があります。この場合、クエリ文字列は強調表示されない場合があります。
パラメーター
パラメーター | 説明 | |
HighlightEncoder | 強調表示されたテキストフラグメントのエンコード方式。有効な値:
| |
FieldHighlightParams | フィールドの強調表示設定。SearchQuery オブジェクトで指定されたキーワードを含むフィールドに対してのみ、強調表示機能を有効にすることができます。 | |
HighlightParameter | NumberOfFragments | 返される強調表示されたテキストフラグメントの最大数。このパラメーターを 1 に設定することをお勧めします。 |
FragmentSize | 返される各テキストフラグメントの長さ。デフォルト値: 100。 重要 返されるテキストフラグメントの実際の長さは、このパラメーターの値と異なる場合があります。 | |
PreTag | クエリキーワードを強調表示するために使用される開始タグ。例: | |
PostTag | クエリキーワードを強調表示するために使用される終了タグ。例: | |
HighlightFragmentOrder | 返される強調表示されたテキストフラグメントのソート規則。
|
例
次のサンプルコードは、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("")
}
}
関連情報
強調表示機能の詳細については、キーワードの強調表示を参照してください。
ネストフィールドをクエリする際に強調表示機能を使用する方法については、ネストクエリを参照してください。