You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何用Elasticsearch的@Query注解实现Sort与Collapse?

用@Query注解实现带Sort和Collapse的Elasticsearch查询

完全可以通过Spring Data Elasticsearch的@Query注解实现你需要的查询,核心是将包含Sort、Collapse的完整DSL嵌入注解中,同时支持动态参数传入。以下是具体实现方式:

代码示例

假设你有对应索引的实体类CleanEntity,定义Repository接口如下:

import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Pageable;
import java.util.List;

public interface CleanEntityRepository extends ElasticsearchRepository<CleanEntity, String> {

    // 固定排序、折叠,动态传入搜索关键词和返回数量
    @Query("""
        {
          "query": {
            "match_phrase_prefix": {
              "search_term": "?0"
            }
          },
          "sort": [
            {
              "search_score": {
                "order": "desc"
              }
            }
          ],
          "collapse": {
            "field": "normalized_term"
          },
          "size": ?1
        }
        """)
    List<CleanEntity> searchWithSortAndCollapse(String searchTerm, int size);

    // 动态排序+固定折叠,结合Pageable控制分页和数量
    @Query("""
        {
          "query": {
            "match_phrase_prefix": {
              "search_term": "?0"
            }
          },
          "collapse": {
            "field": "normalized_term"
          }
        }
        """)
    List<CleanEntity> searchWithCollapseAndDynamicSort(String searchTerm, Sort sort, Pageable pageable);
}

关键说明

  1. 动态参数替换:?0对应方法的第一个参数(搜索关键词),?1对应第二个参数(返回数量),可以根据需求灵活调整参数位置。
  2. Sort的两种配置方式:
    • 固定排序直接写在@Query的DSL中,适合不需要动态调整排序规则的场景。
    • 动态排序通过Sort或Pageable方法参数传入,Spring Data Elasticsearch会自动将其合并到查询中,注意Pageable中的Sort会覆盖注解内的Sort配置。
  3. Collapse的处理:目前Spring Data Elasticsearch没有专门的方法参数支持Collapse,必须在@Query的DSL中明确定义折叠字段。
  4. 版本兼容:Spring Data Elasticsearch 4.x及以上版本支持多行字符串写法(用"""包裹),代码可读性更高;低版本可以将DSL压缩为单行字符串。

内容的提问来源于stack exchange,提问作者ツJediRebellion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:30:52