欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 七天进阶elasticsearch[Four]

七天进阶elasticsearch[Four]

2025/2/23 21:05:31 来源:https://blog.csdn.net/weixin_54061333/article/details/139595457  浏览:    关键词:七天进阶elasticsearch[Four]

依赖:

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>3.3.0</version></dependency>

如果我们定义一个存储库接口来扩展 Spring Data Elasticsearch 提供的 ElasticsearchRepository 接口*,*则默认情况下,相应文档类的 CRUD 操作将变为可用。

此外,方法实现只需以预定义格式声明具有名称的方法即可为我们生成。无需编写存储库接口的实现。

搭建 一个spring项目后引入依赖;

es配置类:

/*** @EnableElasticsearchRepositories将使* Spring Data Elasticsearch 扫描提供的* Spring Data 存储库包*/
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.gavin.elasticSearch.repository")
@ComponentScan(basePackages = "com.gavin.elasticSearch.service")
public class ESConfig extends AbstractElasticsearchConfiguration {@Bean@Overridepublic RestHighLevelClient elasticsearchClient() {ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo("172.21.114.22:9200").build();return RestClients.create(clientConfiguration).rest();}
}

实体映射:

@Data
@Document(indexName = "book")
public class Book {@Field("id")private String id;@Field("name")private String name;@Field("price")private int price;}

crud服务:

Spring Data Elasticsearch 通常会根据项目中的实体自动创建索引,当然这需要我们配置一下,在实体类上添加相应的注解;

新增索引:


@RestController
@RequestMapping("/elastic")
public class ElasticController {@Autowiredprivate BookInfoRepository bookInfoRepository;@PostMapping("/addIndex")public String addIndex(@RequestBody Book book) throws IOException {Book save = bookInfoRepository.save(book);System.out.println(save);return "添加成功";}}

查询:

    /*** 基于名称的查询* @return*/@GetMapping("/findBookByName")public Book getBookInfoByName(String name) {Page<Book> elastic = bookInfoRepository.findBookByName(name, Pageable.ofSize(1));Book book = elastic.get().findFirst().get();return book;}

自定义查询:

@GetMapping("/test")public Book filterBook() {//构造一个查询器MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("name", "ElasticSearch");NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder().withFilter(matchQueryBuilder).build();ElasticsearchRestTemplate elasticsearchRestTemplate = new ElasticsearchRestTemplate(restHighLevelClient);SearchHits<Book> search = elasticsearchRestTemplate.search(nativeSearchQuery, Book.class);search.getSuggest();long totalHits = search.getTotalHits();String s = String.valueOf(totalHits);Integer i = Integer.valueOf(s);Book content = search.getSearchHit(i-1).getContent();return content;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词