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
相关产品推荐
相关产品推荐

