Elasticsearch JS:有没有一种方法可以在执行查询并返回匹配后执行突出显示?

时间:2019-04-19 16:16:39

标签: javascript elasticsearch

我有一个用户可搜索的Elasticsearch索引,该索引的文件通过Elasticsearch的快速矢量突出显示以明显突出显示的方式返回。

索引中的文档具有用户的访问权限,因此,例如,当用户输入搜索查询“ John Doe”时,可以返回超过10,000个包含“ John Doe”上的匹配项的命中,但是命中列表必须会被过滤到允许用户访问的前100个文档中。因此,最后,只有100个匹配项显示给用户。

问题在于,对所有返回的10,000个匹配都执行快速矢量突出显示,因此Elasticsearch对最终丢弃的9,900个匹配进行了昂贵的突出显示。

如果我们完全删除突出显示,则搜索速度会大大提高,但是我们确实需要在这小部分匹配中突出显示。在执行查询并返回匹配后是否可以执行突出显示?

1 个答案:

答案 0 :(得分:1)

我建议在您的搜索查询中使用top_hits聚合。这样,您可以指定它仅返回"size": 100的前100名文档。而且,默认情况下,它会按得分排序,因此您应该获得最匹配的文档。

然后,要进行突出显示,请在highlight聚合中添加top_hits

{
  "aggs": {
    "some-aggs": {
      "top_hits": {
        "size": 100,
        "highlight": {
          "fields": {
            "<field_to_highlight>": {}
          }
        }    
      }
    }
  }
}

为此,您需要在搜索查询中包含访问检查子句。

参考:ES top-hits aggs

相关问题