sorting - 在 Spring Data Elastic Search 中使用路径和过滤器进行嵌套排序
问题描述
我有这段代码需要转换成 spring-data-elastic-search。
{
"query": {
"match_all": {}
},
"size": 10,
"from": 0,
"sort": [
{
"program.title.descriptions.value.keyword": {
"order": "asc",
"nested": {
"path": "program.title.descriptions",
"filter": {
"match": {
"program.title.descriptions.length": "LONG"
}
}
}
}
}
]
}
我已经尝试过了,
SortBuilder sb = SortBuilders.fieldSort(sortBy).order(sortOrder).setNestedSort(new NestedSortBuilder(nestedPath))
但我不知道如何将“过滤器”部分添加到 SortBuilder 中。如果我尝试以下方法,
QueryBuilder matchFirst = QueryBuilders.boolQuery().filter(QueryBuilders.matchQuery("program.title.descriptions.length", "LONG"));
sb = SortBuilders.fieldSort(sortBy).order(sortOrder).setNestedSort(new NestedSortBuilder(nestedPath)).setNestedFilter(matchFirst);
它会说
java.lang.IllegalArgumentException: Setting both nested_path/nested_filter and nested not allowed
at org.elasticsearch.search.sort.FieldSortBuilder.setNestedFilter(FieldSortBuilder.java:213)
任何想法将不胜感激。
解决方案
您需要在嵌套查询中设置过滤器。你可以试试
SortBuilder sb = SortBuilders.fieldSort(sortBy).order(sortOrder).setNestedSort(new NestedSortBuilder(nestedPath).setFilter(matchFirst));
推荐阅读
- r - 如何启动和停止 invalidateLater 函数
- jquery - 在 fancyBox v3 上启用全屏 Vimeo 视频按钮
- reactjs - 什么是 props.children?
- ada - Ada 将一个任务准备好从入口点终止
- python - 当输入停止时停止在远程服务器上跟踪文件使用 paramiko 和 Flask
- javascript - 使用干净的 JavaScript 堆配置文件在长时间运行的 THREE.js 应用程序中的 GPU 崩溃
- python - 使用python合并相似的xml文件
- java - JavaFX TableView 更新单元格,不更新对象值
- c++ - 如何将 arm64 中 vaddv_u8 的结果视为霓虹灯寄存器
- python-asyncio - Python:通过完成订购任务后获取对原始任务的引用