我有一个用户可搜索的Elasticsearch索引,该索引的文件通过Elasticsearch的快速矢量突出显示以明显突出显示的方式返回。
索引中的文档具有用户的访问权限,因此,例如,当用户输入搜索查询“ John Doe”时,可以返回超过10,000个包含“ John Doe”上的匹配项的命中,但是命中列表必须会被过滤到允许用户访问的前100个文档中。因此,最后,只有100个匹配项显示给用户。
问题在于,对所有返回的10,000个匹配都执行快速矢量突出显示,因此Elasticsearch对最终丢弃的9,900个匹配进行了昂贵的突出显示。
如果我们完全删除突出显示,则搜索速度会大大提高,但是我们确实需要在这小部分匹配中突出显示。在执行查询并返回匹配后是否可以执行突出显示?
答案 0 :(得分:1)
我建议在您的搜索查询中使用top_hits
聚合。这样,您可以指定它仅返回"size": 100
的前100名文档。而且,默认情况下,它会按得分排序,因此您应该获得最匹配的文档。
然后,要进行突出显示,请在highlight
聚合中添加top_hits
。
{
"aggs": {
"some-aggs": {
"top_hits": {
"size": 100,
"highlight": {
"fields": {
"<field_to_highlight>": {}
}
}
}
}
}
}
为此,您需要在搜索查询中包含访问检查子句。