通常显示在网页上时,用不同颜色标记出搜索命中的是哪些关键字是很有用的,这就要用到highlight 参数。
举个例子,
GET /_search
{
"query" : {
"match": { "title": "投资", "summary": "投资" }
},
"highlight" : {
"fields" : {
"title" : {},
"summary" : {}
}
}
}
返回的结果里面每个 hit 多了一个类似这样部分:
"highlight" : {
"summary" : [
"它利用非金融性资产能源源不断地在证券市场上融资,采取发行新股和引入风险投资相结合收购恒昌企业,结果各方均取得了满意的结果。",
"其融资的方式主要有发行新股、可换股债券、引入风险投资等。而这些巨额的融资行动是和投资银行紧密充分的合作分不开的。从中得出一些对我国上市公司并购融资有益的启示,可作为并购融资实践的参考。"
],
"title" : [
"中信泰富的并购融资"
]
}
看例子很容易理解,但必须满足一个条件,highlight 里的字段必须是 query 里有的字段,而且query 的字段不能是 _all。highlight 也有3中,分别介绍。
定制highlight
下面的参数可以改变返回的结果。即可以为单独的字段设置不同的参数,也可以作为 highlight 的属性统一定义。
number_of_fragments
fragment是指一段连续的文字。返回结果最多可以包含几段不连续的文字。默认是5。
fragment_size
一段fragment 包含多少个字符。默认100。
pre_tags
标记 highlight 的开始标签。例如上面的。
post_tags
标记 highlight 的结束标签。例如上面的。
encoder
说明字段是否为 html 格式,default:不是,html: 是。
no_match_size
即使字段中没有关键字命中,也可以返回一段文字,该参数表示从开始多少个字符被返回。
还有更多的参数请参考官方文档。