在长字段上执行查询时,即。 Description
,字段本身可能是200天或更长的字符。
要显示搜索结果中的相关性,ES可以将字段的不同部分拼接在一起以显示此内容吗?
例如:
有一辆红色的汽车,有四扇门沿着砖路行驶......另一个红色的气球漂浮着。
如果查询搜索“红色”,有没有办法显示如下内容:
有一扇带有四扇门的[em]红色[/ em]车。 。 。而另一个[em]红色[/ em]气球漂浮着。
我意识到我们可以使用highlight
来将匹配的关键字片段包装在重点标签中。
我想知道ES是否可以将匹配关键字片段周围的相关字段片段拼接在一起。
答案 0 :(得分:2)
是的,您正走在正确的道路上,这正是highlighting的用途。让我们试试你的例子。
首先,让我们创建一个索引highlights
,其映射类型包含一个名为content
的字符串字段。对于此示例,我们使用fast vector highlighter,它可以完成我们想要显示的内容。
curl -XPUT localhost:9200/highlights -d '{
"mappings": {
"highlight": {
"properties": {
"content": {
"type": "string",
"term_vector": "with_positions_offsets"
}
}
}
}
}'
然后我们使用您建议的内容索引新文档:
curl -XPUT localhost:9200/highlights/highlight/1 -d '{
"content": "There was a red car with four doors driving down the brick road bla bla bla bla bla bla bla bla bla bla bla bla and another red balloon was floating."
}'
现在我们可以查询并突出显示red
一词,如下所示:
curl -XPOST localhost:9200/highlights/highlight/_search -d '{
"_source": false,
"query": {
"match": {
"content": "red"
}
},
"highlight": {
"fields": {
"content": {
"fragment_size": 30
}
}
}
}'
这会产生以下结果:
{
...
"hits" : {
"total" : 1,
"max_score" : 0.06780553,
"hits" : [ {
"_index" : "highlights",
"_type" : "highlight",
"_id" : "1",
"_score" : 0.06780553,
"highlight" : {
"content" : [
"There was a <em>red</em> car with four doors",
"bla and another <em>red</em> balloon was floating"
]
}
} ]
}
}
另请注意,如果需要,标签可以customized and changed为您的喜好。