详解ElasticSearch搜索引擎在SpringBoot中的实践
ElasticSearch 是一个基于 Lucene 的搜索引擎,它提供了分布式、多租户、全文搜索等功能。在 Spring Boot 中,我们可以使用 Spring Data Elasticsearch 来集成 ElasticSearch,实现搜索功能。本文将详细介绍 ElasticSearch 在 Spring Boot 中的实践,并提供两个示例。
环境准备
在开始之前,我们需要准备以下环境:
- JDK 1.8 或更高版本
- Spring Boot 2.0 或更高版本
- ElasticSearch 6.0 或更高版本
集成 ElasticSearch
在 Spring Boot 中,我们可以使用 Spring Data Elasticsearch 来集成 ElasticSearch。Spring Data Elasticsearch 提供了一组简单易用的 API,可以帮助我们快速地实现搜索功能。
以下是集成 ElasticSearch 的步骤:
- 添加 Spring Data Elasticsearch 依赖项
在 pom.xml
文件中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- 配置 ElasticSearch 连接
在 application.properties
文件中添加以下配置:
spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=localhost:9300
在上面的示例中,我们配置了 ElasticSearch 的集群名称为 my-application
,集群节点为 localhost:9300
。
- 创建实体类
创建一个实体类,用于映射 ElasticSearch 中的文档。以下是一个示例:
@Document(indexName = "book", type = "novel")
public class Book {
@Id
private String id;
private String name;
private String author;
private String description;
// 省略 getter 和 setter 方法
}
在上面的示例中,我们使用 @Document
注解来指定文档的索引名称和类型。我们还使用 @Id
注解来指定文档的 ID。
- 创建 ElasticSearch 仓库
创建一个 ElasticSearch 仓库,用于操作 ElasticSearch 中的文档。以下是一个示例:
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findByName(String name);
List<Book> findByAuthor(String author);
}
在上面的示例中,我们创建了一个名为 BookRepository
的 ElasticSearch 仓库,并继承了 ElasticsearchRepository
接口。我们还定义了两个方法,用于根据书名和作者名搜索书籍。
- 使用 ElasticSearch 仓库
在需要使用 ElasticSearch 的地方,我们可以使用 @Autowired
注解来注入 BookRepository
,并使用其提供的方法来操作 ElasticSearch 中的文档。以下是一个示例:
@RestController
public class BookController {
@Autowired
private BookRepository bookRepository;
@GetMapping("/books")
public List<Book> searchBooks(@RequestParam String keyword) {
List<Book> books = bookRepository.findByName(keyword);
books.addAll(bookRepository.findByAuthor(keyword));
return books;
}
}
在上面的示例中,我们创建了一个名为 BookController
的控制器类,并使用 @Autowired
注解来注入 BookRepository
。我们还创建了一个名为 searchBooks
的方法,用于搜索书籍。在这个例子中,我们使用了 findByName
和 findByAuthor
方法来搜索书籍。
示例一:使用 ElasticSearch 搜索书籍
以下是一个使用 ElasticSearch 搜索书籍的示例:
- 创建一个名为
Book
的实体类:
@Document(indexName = "book", type = "novel")
public class Book {
@Id
private String id;
private String name;
private String author;
private String description;
// 省略 getter 和 setter 方法
}
在上面的示例中,我们使用 @Document
注解来指定文档的索引名称和类型。我们还使用 @Id
注解来指定文档的 ID。
- 创建一个名为
BookRepository
的 ElasticSearch 仓库:
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
List<Book> findByName(String name);
List<Book> findByAuthor(String author);
}
在上面的示例中,我们创建了一个名为 BookRepository
的 ElasticSearch 仓库,并继承了 ElasticsearchRepository
接口。我们还定义了两个方法,用于根据书名和作者名搜索书籍。
- 创建一个名为
BookController
的控制器类:
@RestController
public class BookController {
@Autowired
private BookRepository bookRepository;
@GetMapping("/books")
public List<Book> searchBooks(@RequestParam String keyword) {
List<Book> books = bookRepository.findByName(keyword);
books.addAll(bookRepository.findByAuthor(keyword));
return books;
}
}
在上面的示例中,我们创建了一个名为 BookController
的控制器类,并使用 @Autowired
注解来注入 BookRepository
。我们还创建了一个名为 searchBooks
的方法,用于搜索书籍。在这个例子中,我们使用了 findByName
和 findByAuthor
方法来搜索书籍。
-
启动应用程序。
-
访问
http://localhost:8080/books?keyword=Java
,应用程序将返回所有书名或作者名包含 "Java" 的书籍。
示例二:使用 ElasticSearch 搜索文章
以下是一个使用 ElasticSearch 搜索文章的示例:
- 创建一个名为
Article
的实体类:
@Document(indexName = "article", type = "news")
public class Article {
@Id
private String id;
private String title;
private String content;
private Date createTime;
// 省略 getter 和 setter 方法
}
在上面的示例中,我们使用 @Document
注解来指定文档的索引名称和类型。我们还使用 @Id
注解来指定文档的 ID。
- 创建一个名为
ArticleRepository
的 ElasticSearch 仓库:
@Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
List<Article> findByTitleContainingOrContentContaining(String title, String content);
}
在上面的示例中,我们创建了一个名为 ArticleRepository
的 ElasticSearch 仓库,并继承了 ElasticsearchRepository
接口。我们还定义了一个方法,用于根据标题或内容搜索文章。
- 创建一个名为
ArticleController
的控制器类:
@RestController
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;
@GetMapping("/articles")
public List<Article> searchArticles(@RequestParam String keyword) {
return articleRepository.findByTitleContainingOrContentContaining(keyword, keyword);
}
}
在上面的示例中,我们创建了一个名为 ArticleController
的控制器类,并使用 @Autowired
注解来注入 ArticleRepository
。我们还创建了一个名为 searchArticles
的方法,用于搜索文章。在这个例子中,我们使用了 findByTitleContainingOrContentContaining
方法来搜索文章。
-
启动应用程序。
-
访问
http://localhost:8080/articles?keyword=Java
,应用程序将返回所有标题或内容包含 "Java" 的文章。
结束语
在本文中,我们详细介绍了 ElasticSearch 在 Spring Boot 中的实践,并提供了两个示例。这些技巧可以帮助我们更好地理解 ElasticSearch 和 Spring Boot 的集成,以及如何使用 Spring Data Elasticsearch 来实现搜索功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Elastic Search搜索引擎在SpringBoot中的实践 - Python技术站