java - 将 ES 查询转换为按键和值对嵌套对象进行排序到 Java API(ES 版本 6.2)的问题
问题描述
我想将下面的 ES 查询转换为 Java API
{
"sort": [
{
"nested_objects.Value": {
"order": "desc",
"nested_path": "nested_objects",
"nested_filter": {
"term": { "nested_objects.Key": "abc" }
}
}
}
]
}
尝试编写如下查询,但看起来以前的工作方法现在在 ES 6.2 中已弃用
FieldSortBuilder mySort = SortBuilders.fieldSort("nested_objects.Value")
.setNestedFilter(QueryBuilders.nestedQuery("nested_objects",
QueryBuilders.termQuery("nested_objects.Key", "abc"), ScoreMode.Avg))
.order(SortOrder.DESC);
setNestedFilter() 似乎已弃用任何替代方案?
解决方案
我已从此弃用列表链接中复制了以下文本
org.elasticsearch.search.sort.FieldSortBuilder.getNestedFilter()
set nested sort with FieldSortBuilder.setNestedSort(NestedSortBuilder) and retrieve with FieldSortBuilder.getNestedSort()
org.elasticsearch.search.sort.FieldSortBuilder.getNestedPath()
set nested sort with FieldSortBuilder.setNestedSort(NestedSortBuilder) and retrieve with FieldSortBuilder.getNestedSort()
您可以看到他们如何提到您需要使用NestedSortBuilder
以下是您可以执行的操作。只需创建一个术语查询QueryBuilder
,并在setFilter
链接到setNestedSort
.
QueryBuilder query = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("nested_objects.Key", "abc"));
FieldSortBuilder mySort = SortBuilders.fieldSort("nested_objects.Value")
.order(SortOrder.DESC)
.setNestedSort(new NestedSortBuilder("nested_objects")
.setFilter(query));
希望能帮助到你!
推荐阅读
- eclipse - Eclipse - 无法完成安装,因为找不到一个或多个必需项目(解压缩安装任务)
- angular - 无响应:无法 dockerize 和运行 Angular 应用程序
- python - 计算列中gps坐标之间的距离
- python - 使用 pdf2image 将 PDF 转换为图像不起作用
- gradle - 如何将子项目生成的类添加到 Gradle 中 WAR 文件的 WEB-INF/classes 目录
- android - 长度过滤器不适用于 textview ?- 安卓
- typescript - api 数据验证的最佳实践
- python - 在 Python Clicker 游戏中每秒添加硬币
- amazon-web-services - 使用 AWS cli 所需的 Amazon EMR 集群详细信息
- python - 在元数据之后检测 CSV 的开头