? 1、Elasticsearch介紹??
? ? ?Elasticsearch是一個(gè)開源的高擴(kuò)展的分布式全文檢索引擎,它可以近乎實(shí)時(shí)的存儲、檢索數(shù)據(jù);本身擴(kuò)展性很好,可以擴(kuò)展到上百臺服務(wù)器,處理PB級別的數(shù)據(jù)。?
Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。
2、安裝Elasticsearch服務(wù)并進(jìn)行相關(guān)配置,啟動(dòng)Elasticsearch服務(wù)
3、安裝Elasticsearch Header ?可視查看相關(guān)記錄信息
文章來源:http://www.zghlxwxcb.cn/news/detail-582150.html
4、 pom.xml
<!-- elasticsearch -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
</dependency>
5、application.yml
spring:
? elasticsearch:
? ? jest:
? ? ? uris:
? ? ? ? - http://localhost:9200
? ? ? read-timeout: 5000
6、我們創(chuàng)建一個(gè)MyTestController 接口類
package com.zx.log.controller;
import com.zx.log.entity.UserOperationLog;
import com.zx.log.service.visit.UserOperationLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Properties;
import java.util.UUID;
/**
* @Date 2022/7/20 11:05
* 用著測試用的“”:“”“:”“:”“
* @Version 1.0
*/
@RestController
@Api(tags = "測試測試")
@RequestMapping("/mytest")
public class MyTestController {
@Autowired
private UserOperationLogService userOperationLogService;
/**
* 創(chuàng)建es索引
*
* @return
*/
@RequestMapping(value = "/createIndex")
public String createIndex() {
userOperationLogService.createIndex("test");
return "ok";
}
/**
* 新增行
*
* @return
*/
@RequestMapping(value = "/saveEntity")
public String saveEntity() {
UserOperationLog userOperationLog = new UserOperationLog();
userOperationLog.setNumId(UUID.randomUUID().toString().replace("-", ""));
userOperationLog.setAppName("111");
userOperationLog.setAppEnName("appEnName");
userOperationLog.setFunName("funName");
userOperationLog.setFunEnName("funEnName");
userOperationLog.setOpType("opType");
userOperationLogService.saveEntity(userOperationLog);
return "ok";
}
@RequestMapping(value = "/delEntity")
public String delEntity() {
userOperationLogService.delEntity("JkJSIIIBXZZ9IO25Drr1");
return "ok";
}
}
7、創(chuàng)建接口類:
package com.zx.log.service.visit;
import com.zx.log.entity.UserOperationLog;
import java.util.List;
/**
* @Author bo
* @Version 1.0
*/
public interface UserOperationLogService {
/**
* 單個(gè)插入ES
* @param entity
*/
void saveEntity(UserOperationLog entity);
/**
* 刪除某條ES
* @param id
*/
void delEntity(String id);
/**
* 批量保存到ES
* @param entityList
*/
void saveEntity(List<UserOperationLog> entityList);
/**
* 在ES中搜索內(nèi)容
*/
List<UserOperationLog> searchEntity(String searchContent);
/**
* 創(chuàng)建索引
*
* @param indexName
*/
void createIndex(String indexName);
/**
* 刪除索引
*
* @param indexName
*/
void deleteIndex(String indexName);
}
8、創(chuàng)建實(shí)現(xiàn)類:
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Bulk;
import io.searchbox.core.Delete;
import io.searchbox.core.Index;
import io.searchbox.core.Search;
import io.searchbox.indices.CreateIndex;
import io.searchbox.indices.DeleteIndex;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
/**
* @Author 波
* @Date 2022/7/21 11:05
* @Version 1.0
*/
@Service
public class UserOperationLogServiceImpl implements UserOperationLogService {
private static final Logger LOGGER = LoggerFactory.getLogger(UserOperationLogServiceImpl.class);
@Autowired
private JestClient jestClient;
@Override
public void saveEntity(UserOperationLog entity) {
Index index = new Index.Builder(entity).id(entity.getNumId()).index("test").type("news").build();
try {
jestClient.execute(index);
LOGGER.info("插入完成");
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
}
}
@Override
public void delEntity(String id) {
Delete index = new Delete.Builder(id).index("test").type("news").build();
try {
jestClient.execute(index);
LOGGER.info("刪除完成");
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
}
}
@Override
public void saveEntity(List<UserOperationLog> entityList) {
Bulk.Builder bulk = new Bulk.Builder();
for (UserOperationLog entity : entityList) {
Index index = new Index.Builder(entity).id(String.valueOf(entity.getNumId())).index("test").type("news").build();
bulk.addAction(index);
}
try {
jestClient.execute(bulk.build());
LOGGER.info("批量插入完成");
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
}
}
/**
* 在ES中搜索內(nèi)容
*/
@Override
public List<UserOperationLog> searchEntity(String searchContent) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("studentName", searchContent));
Search search = new Search.Builder(searchSourceBuilder.toString())
.addIndex("test").addType("news").build();
try {
JestResult result = jestClient.execute(search);
return result.getSourceAsObjectList(UserOperationLog.class);
} catch (IOException e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* 創(chuàng)建索引
*
* @param indexName
*/
@Override
public void createIndex(String indexName) {
try {
CreateIndex createIndex = new CreateIndex.Builder(indexName).build();
JestResult result = jestClient.execute(createIndex);
LOGGER.info("result", result.getJsonString());
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
}
/**
* 刪除索引
*
* @param indexName
*/
@Override
public void deleteIndex(String indexName) {
try {
DeleteIndex deleteIndex = new DeleteIndex.Builder(indexName).build();
JestResult result = jestClient.execute(deleteIndex);
LOGGER.info("result", result.getJsonString());
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
}
}
? ?上面的實(shí)體類大家可以自由發(fā)揮,隨便創(chuàng)建一個(gè)就行并指定數(shù)據(jù)行ID,主要方便數(shù)據(jù)后續(xù)的刪除。文章來源地址http://www.zghlxwxcb.cn/news/detail-582150.html
到了這里,關(guān)于SpringBoot 集成Elasticsearch簡單八步的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!