Elasticsearch 8.12:如何用Lambda将嵌套排序JSON转为Java DSL的withSort?
Elasticsearch嵌套排序的Java Query DSL实现(ES 8.12 + Spring 3.1.3)
需求对应的JSON排序配置
{ "sort": [ { "estoques.preco": { "order": "asc", "nested": { "path": "estoques", "filter": { "term": { "estoques.filial": 21 } } } } } ] }
对应的Java Query DSL实现(Lambda表达式风格)
NativeQuery query = NativeQuery.builder() .withSort(sort -> sort .field(f -> f .name("estoques.preco") .order(SortOrder.ASC) .nested(nested -> nested .path("estoques") .filter(filter -> filter .term(term -> term .field("estoques.filial") .value(21) ) ) ) ) ) // 可按需追加其他查询配置(如withQuery添加主查询条件) .build();
代码说明
- 通过
NativeQuery.builder()构建查询,利用withSort结合Lambda表达式配置排序规则 - 用
field()指定排序字段estoques.preco,并设置升序排序SortOrder.ASC - 借助
nested()配置嵌套排序的路径estoques,同时在filter中添加term条件,过滤出嵌套文档中estoques.filial等于21的数据 - 可根据业务需求继续添加其他查询逻辑(比如主查询条件、分页等)
内容的提问来源于stack exchange,提问作者fabio petry
相关产品推荐
相关产品推荐

