Elasticsearch是一个开源的、高性能的分布式搜索引擎,可以实现全文搜索、分析和存储等功能。Spring Boot是一个开源的Java框架,可以用于快速开发和部署应用程序。
将Elasticsearch和Spring Boot整合可以使得我们更加方便地使用Elasticsearch进行搜索和数据分析。以下是整合的步骤:
在Spring Boot工程中,可以在pom.xml文件中添加以下依赖,其中elasticsearch和elasticsearch-rest-high-level-client是Elasticsearch相关的依赖:
- <dependency>
- <groupId>org.elasticsearch</groupId>
- <artifactId>elasticsearch</artifactId>
- <version>6.8.17</version>
- </dependency>
-
- <dependency>
- <groupId>org.elasticsearch.client</groupId>
- <artifactId>elasticsearch-rest-high-level-client</artifactId>
- <version>6.8.17</version>
- </dependency>
在Spring Boot工程中,可以在application.properties或application.yml文件中添加以下配置,注意将host和port替换为Elasticsearch的实际地址和端口:
spring.data.elasticsearch.cluster-nodes=host:port
在Spring Boot的项目中,可以使用RestHighLevelClient创建Elasticsearch客户端。以下是一个简单的示例代码:
- @Configuration
- public class ElasticsearchClientConfig {
-
- @Value("${spring.data.elasticsearch.cluster-nodes}")
- private String clusterNodes;
-
- @Bean
- public RestHighLevelClient restHighLevelClient() {
- String[] nodes = clusterNodes.split(",");
- HttpHost[] httpHosts = new HttpHost[nodes.length];
- for (int i = 0; i < nodes.length; i++) {
- String node = nodes[i];
- httpHosts[i] = new HttpHost(node.split(":")[0], Integer.parseInt(node.split(":")[1]), "http");
- }
- return new RestHighLevelClient(RestClient.builder(httpHosts));
- }
- }
在Spring Boot的项目中,可以使用ElasticsearchRepository来操作Elasticsearch中的数据。以下是一个示例代码:
- public interface BookRepository extends ElasticsearchRepository<Book, String> {
-
- List<Book> findByTitle(String title);
-
- List<Book> findByAuthor(String author);
- }
其中,Book是用于存储书籍信息的实体类,可以根据需要进行定义。在该接口中,实现了根据标题和作者进行搜索的功能。
在Spring Boot的项目中,可以使用ElasticsearchRepository中定义的方法来进行数据操作。以下是一个示例代码:
- @RestController
- @RequestMapping("/books")
- public class BookController {
-
- @Autowired
- private BookRepository bookRepository;
-
- @PostMapping("/")
- public Book save(@RequestBody Book book) {
- return bookRepository.save(book);
- }
-
- @GetMapping("/{id}")
- public Book getById(@PathVariable("id") String id) {
- return bookRepository.findById(id).orElse(null);
- }
-
- @GetMapping("/")
- public List<Book> getByTitle(@RequestParam("title") String title) {
- return bookRepository.findByTitle(title);
- }
- }
以上代码实现了通过RESTful API进行数据操作的功能,包括保存图书信息、根据ID查询图书信息、根据标题查询图书信息等。