You need to enable JavaScript to run this app. Spring 5.3项目ElasticSearch配置后执行查询获取书籍列表的方法
优惠活动
大模型
产品
解决方案
定价
更多

Spring 5.3项目ElasticSearch配置后执行查询获取书籍列表的方法

Spring 5.3 项目中实现指定ES多字段检索的方法

前提:你已经完成Spring项目与Elasticsearch的基础配置(包括ES客户端Bean注入、实体类与索引的映射规则配置),可直接复用现有配置实现对应查询逻辑。

具体实现步骤

  • 第一步:对齐实体类与ES索引的字段映射
    提前定义对应books索引的书籍实体类,确保和ES中的字段名(注意首字母大小写)完全匹配,示例代码:

    @Document(indexName = "books")
    public class Book {
        @Id
        private String id;
        // 显式指定ES中对应的字段名,避免大小写不匹配导致检索失效
        @Field(name = "Author")
        private String author;
        @Field(name = "Blurb")
        private String blurb;
        // 其余业务字段按需补充
        // 省略getter、setter、无参/全参构造方法
    }
    
  • 第二步:注入Spring Data ES核心操作类
    项目完成ES配置后,容器会自动注册可直接使用的ES操作Bean,直接在业务类中注入即可:

    @Service
    public class BookSearchService {
        @Autowired
        private ElasticsearchOperations elasticsearchOperations;
    
        // 具体检索方法写在这里
    }
    
  • 第三步:构建与目标DSL完全匹配的查询逻辑
    在业务类中编写检索方法,代码逻辑和你提供的原生DSL一一对应,无需手动拼接JSON请求:

    public List<Book> getMatchedBooks(String keyword) {
        // 构建多字段匹配规则:在Author、Blurb两个字段中检索传入的关键词
        // 需导入对应依赖包:org.elasticsearch.index.query.MultiMatchQueryBuilder
        MultiMatchQueryBuilder multiMatchQuery = new MultiMatchQueryBuilder(
            keyword,
            "Author", "Blurb"
        );
        // 构建查询请求,指定返回规则:从首页开始最多返回10条结果,和DSL中size:10的规则完全一致
        // 需导入对应依赖包:org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
        Query searchQuery = new NativeSearchQueryBuilder()
            .withQuery(multiMatchQuery)
            .withPageable(PageRequest.of(0, 10))
            .build();
        // 执行查询,自动将ES返回的结果映射为Book实体
        SearchHits<Book> searchHits = elasticsearchOperations.search(searchQuery, Book.class);
        // 提取结构化的书籍列表返回
        return searchHits.stream()
            .map(SearchHit::getContent)
            .toList();
    }
    

使用注意事项

  • 调用方法时直接传入关键词harry,即可得到和原生DSL执行结果完全一致的书籍列表
  • 字段名必须和ES中存储的字段大小写完全一致,否则会出现检索无结果的问题
  • 若需要调整返回条数,只需修改PageRequest.of的第二个参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 08:45:06