使用 Tablestore Go SDK 为 Text 字段返回匹配文本的摘要片段并标记命中词。
前提条件
开始前,完成以下准备工作:
-
安装Tablestore Go SDK并初始化客户端。
-
创建多元索引时,为需要高亮的 Text 字段启用 EnableHighlighting。具体操作请参见创建多元索引。
功能说明
摘要与高亮从匹配的 Text 字段中提取文本片段,并使用指定标签标记命中词。Go SDK 支持对以下查询条件返回摘要与高亮:精确查询、多词精确查询、前缀查询、通配符查询、范围查询、多条件组合查询、固定评分查询、匹配查询、短语匹配查询和嵌套类型查询(通过 InnerHits)。
使用
MatchQuery或MatchPhraseQuery时,同一个命中词条可能被多组前置标签和后置标签标记。Text字段使用最大语义分词时,MatchPhraseQuery不支持摘要与高亮。分片边界可能切分命中词条,导致该词条未被高亮。
highlight := search.NewHighlight().
AddFieldHighlightParameter(
"title",
search.NewHighlightParameter().
SetNumberOfFragments(3).
SetPreTag("<em>").
SetPostTag("</em>"),
)
searchQuery := search.NewSearchQuery().
SetQuery(&search.MatchQuery{FieldName: "title", Text: "go search"}).
SetHighlight(highlight)
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
})
if err != nil {
log.Fatal(err)
}
for _, hit := range response.SearchHits {
fmt.Println(hit.HighlightResultItem)
}
参数说明
高亮配置
|
名称 |
类型 |
说明 |
|
FieldHighlightParameters(必选) |
map[string]*search.HighlightParameter |
字段名称与高亮参数的映射。字段必须已启用摘要与高亮,并参与支持摘要与高亮的查询条件,否则不会返回该字段的高亮分片。 |
|
HighlightEncoder(可选) |
*search.HighlightEncoder |
高亮分片原文的编码方式。取值如下:
|
字段高亮参数
|
名称 |
类型 |
说明 |
|
NumberOfFragments(可选) |
*int32 |
返回的高亮分片最大数量,推荐设置为 1。 |
|
FragmentSize(可选) |
*int32 |
每个分片的目标长度,默认值为 100。实际分片长度可能与该值不同。 |
|
PreTag(可选) |
*string |
命中词前标签,默认值为 |
|
PostTag(可选) |
*string |
命中词后标签,默认值为 |
|
HighlightFragmentOrder(可选) |
*search.HighlightFragmentOrder |
高亮分片排序方式。TextSequence 按原文出现顺序排序,默认使用该值;Score 按命中评分排序。 |
返回值
配置摘要与高亮后,从 SearchResponse.SearchHits[].HighlightResultItem.HighlightFields 读取各字段的高亮分片。嵌套类型查询的高亮结果从 SearchInnerHits 中的命中项读取。