下面我将给出SpringBoot整合Elasticsearch7.2.0的实现方法的完整攻略,具体流程如下:
一、引入依赖
首先,在pom.xml
文件中引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
其中,第一个依赖是SpringBoot整合Elasticsearch的必要依赖,第二个依赖是Elasticsearch的Java高级客户端依赖。
二、配置Elasticsearch
在application.properties
文件中配置Elasticsearch信息:
spring.elasticsearch.rest.uris=http://localhost:9200
通过以上配置,告诉SpringBoot要连接的Elasticsearch实例的地址为http://localhost:9200
。
三、编写数据实体类
为了方便后续对Elasticsearch进行操作,我们需要先定义数据实体类。例如,定义一个Book
类:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "book", type = "_doc")
public class Book {
@Id
private String id;
private String name;
private String author;
private Double price;
private LocalDate publishDate;
}
注解说明:
@Document
:用于标识对应实体类在Elasticsearch中的索引和类型。本例中,索引名为book
,类型为_doc
。@Id
:用于标识对应实体类在Elasticsearch中的唯一标识属性。@Data
:使用Lombok插件自动生成getter、setter、toString等方法。@NoArgsConstructor
、@AllArgsConstructor
:无参构造方法和全参构造方法。
四、实现对Elasticsearch的操作
(1)创建索引
@Autowired
private RestHighLevelClient client;
public void createIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("book");
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
boolean acknowledged = response.isAcknowledged();
boolean shardsAcknowledged = response.isShardsAcknowledged();
if (acknowledged && shardsAcknowledged) {
log.info("创建索引成功");
}
}
该方法通过使用RestHighLevelClient
对象的indices().create()
方法创建Elasticsearch索引。其中,CreateIndexRequest
对象传入要创建的索引名,CreateIndexResponse
对象接收响应结果。如果响应结果中acknowledged
和shardsAcknowledged
属性都为true
,则表示创建成功。
(2)删除索引
public void deleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("book");
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
if (response.isAcknowledged()) {
log.info("删除索引成功");
}
}
该方法通过使用RestHighLevelClient
对象的indices().delete()
方法删除Elasticsearch索引。其中,DeleteIndexRequest
对象传入要删除的索引名,AcknowledgedResponse
对象接收响应结果。如果响应结果中acknowledged
属性为true
,则表示删除成功。
(3)添加数据
public void insert(Book book) throws IOException {
IndexRequest request = new IndexRequest("book", "_doc", book.getId())
.source(new ObjectMapper().writeValueAsString(book), XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
RestStatus status = response.status();
if (status == RestStatus.CREATED) {
log.info("添加数据成功");
}
}
该方法通过使用RestHighLevelClient
对象的index()
方法向Elasticsearch索引中添加数据。其中,IndexRequest
对象传入要添加的索引名、索引类型、唯一标识属性值和要添加的文档的JSON格式字符串,IndexResponse
对象接收响应结果。如果响应结果中的status
属性是CREATED
,则表示添加数据成功。
(4)修改数据
public void update(Book book) throws IOException {
UpdateRequest request = new UpdateRequest("book", "_doc", book.getId())
.doc(new ObjectMapper().writeValueAsString(book), XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
RestStatus status = response.status();
if (status == RestStatus.OK) {
log.info("修改数据成功");
}
}
该方法通过使用RestHighLevelClient
对象的update()
方法向Elasticsearch索引中修改数据。其中,UpdateRequest
对象传入要修改的索引名、索引类型、唯一标识属性值和要修改的文档的JSON格式字符串,UpdateResponse
对象接收响应结果。如果响应结果中的status
属性是OK
,则表示修改数据成功。
(5)删除数据
public void delete(String id) throws IOException {
DeleteRequest request = new DeleteRequest("book", "_doc", id);
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
RestStatus status = response.status();
if (status == RestStatus.OK) {
log.info("删除数据成功");
}
}
该方法通过使用RestHighLevelClient
对象的delete()
方法从Elasticsearch索引中删除数据。其中,DeleteRequest
对象传入要删除的索引名、索引类型和唯一标识属性值,DeleteResponse
对象接收响应结果。如果响应结果中的status
属性是OK
,则表示删除数据成功。
五、示例
下面分别介绍创建索引和添加数据的示例。
(1)创建索引示例
@SpringBootTest
@RunWith(SpringRunner.class)
public class BookTest {
@Autowired
private BookService bookService;
@Test
public void testCreateIndex() throws Exception {
bookService.createIndex();
}
}
该示例中,通过在测试类中注入BookService
对象,调用其createIndex()
方法创建索引。
(2)添加数据示例
@SpringBootTest
@RunWith(SpringRunner.class)
public class BookTest {
@Autowired
private BookService bookService;
@Test
public void testInsert() throws Exception {
Book book = new Book("1", "SpringBoot从入门到精通", "张三", 99.9, LocalDate.now());
bookService.insert(book);
}
}
该示例中,通过在测试类中注入BookService
对象,调用其insert()
方法向索引中添加一条数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Elasticsearch7.2.0的实现方法 - Python技术站