javascript - Elasticsearch JS:有没有办法在执行查询并返回命中后执行突出显示?
问题描述
我有一个用户可搜索的 Elasticsearch 索引,其文档通过 Elasticsearch 的快速矢量突出显示以标记突出显示返回。
索引中的文档具有用户访问权限,因此当用户输入搜索查询“John Doe”时,例如,可以返回超过 10,000 个包含“John Doe”匹配项的匹配项,但必须将匹配项列表过滤掉到允许用户访问的前 100 个文档。因此,最终,只有 100 个命中显示给用户。
问题是对返回的所有 10,000 个命中执行快速矢量突出显示,因此 Elasticsearch 对最终被丢弃的 9,900 个命中执行昂贵的突出显示。
如果我们完全删除突出显示,搜索速度会大大提高,但我们确实需要在这一小部分命中上突出显示。有没有办法在执行查询并返回命中后执行突出显示?
解决方案
我建议top_hits
在您的搜索查询中使用聚合。有了它,您可以指定它只返回前 100 个带有"size": 100
. 而且,默认情况下,它按分数排序,因此您应该获得最佳匹配的文档。
并且,要执行突出显示,请添加highlight
内top_hits
聚合。
{
"aggs": {
"some-aggs": {
"top_hits": {
"size": 100,
"highlight": {
"fields": {
"<field_to_highlight>": {}
}
}
}
}
}
}
为此,您需要在搜索查询中包含访问检查子句。
Ref: ES 热门 aggs
推荐阅读
- ios - 如果将 io.flutter.embedded_views_preview 设置为 true,则无法正常运行 flutter 项目
- python-3.x - 无法使用 PyTorch 创建 CNN
- android-studio - 将值传递给 Kotlin 中的另一个活动
- r - R 用于数据科学编程问题
- python - Python pandas将函数应用于分组数据框
- javascript - 来自firebase的Vuex值分配
- python - 拉直垂直平面
- opentap-proj - 如何为一个测试步骤存储超过 5 个字段?
- javascript - material-ui-search-bar 作为样式化组件
- python - 在 python 中将摄氏度转换为华氏温度时遇到问题。这是我的代码