官方文檔:https://www.elastic.co/guide/en/elasticsearch/client/index.html
新建SpringBoot項目 引入Jar包
注意項目引入的elasticsearch的版本與自己安裝的版本是否一致
:我本地安裝的版本7.15.1 ,項目引入的jar包版本:7.12.1
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
新建ES的Config文件
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
return client;
}
}
測試索引API
@Test
public void createIndices() throws IOException {
//1.創建索引
CreateIndexRequest createIndexRequest = new CreateIndexRequest(Indices_01);
//2.客戶端執行請求
CreateIndexResponse createIndexResponse = restHighLevelClient.indices()
.create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println("創建索引結果:" + createIndexResponse);
}
@Test
public void getIndices() throws IOException {
GetIndexRequest getIndexRequest = new GetIndexRequest(Indices_01);
boolean exists = restHighLevelClient.indices()
.exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println("判斷索引是否存在:" + exists);
GetIndexResponse getIndexResponse = restHighLevelClient.indices()
.get(getIndexRequest, RequestOptions.DEFAULT);
System.out.println("獲取索引結果:" + getIndexResponse);
}
@Test
public void delIndices() throws IOException {
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(Indices_01);
AcknowledgedResponse delete = restHighLevelClient.indices()
.delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println("刪除索引結果:" + delete.isAcknowledged());
}
測試文檔API
@Test
public void createDoc() throws IOException {
School school = new School("深圳南山小學", "1,1,0,1");
IndexRequest indexRequest = new IndexRequest(Indices_01);
//規則:put /index/_doc/1
indexRequest.id("1");
indexRequest.timeout(TimeValue.timeValueSeconds(1));
indexRequest.timeout("1s");
indexRequest.source(school, XContentType.JSON);
IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println("創建文檔:" + index.toString() + " status=" + index.status());
}
@Test
public void getDoc() throws IOException {
GetRequest getRequest = new GetRequest(Indices_01, "1");
//不獲取返回的 _source 的上下文:
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
System.out.println("判斷文檔是否存在:" + exists);
GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println("獲取文檔內容:" + documentFields.getSourceAsString());
}
@Test
public void updateDoc() throws IOException {
UpdateRequest updateRequest = new UpdateRequest(Indices_01, "1");
updateRequest.timeout("1s");
School school = new School("深圳福田小學", "1,1,0,1");
updateRequest.doc(JSON.toJSONString(school), XContentType.JSON);
UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
System.out.println("更新文檔結果:status=" + update.status());
}
@Test
public void delDoc() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest(Indices_01, "1");
deleteRequest.timeout("1s");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println("刪除文檔結果:status=" + delete.status());
}
批量保存數據
@Test
public void batchAddDoc() throws IOException {
BulkRequest bulkRequest = new BulkRequest(Indices_01);
bulkRequest.timeout("10s");
List<School> list = Lists.newArrayList();
for (int i = 0; i < 20; i++) {
School school = new School("深圳隨機小學" + i, "1,0,1");
list.add(school);
}
//批處理請求
for (int i = 0; i < list.size(); i++) {
bulkRequest.add(new IndexRequest(Indices_01)
.id("" + (i +1))
.source(JSON.toJSONString(list.get(i)), XContentType.JSON)
);
}
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
//hasFailures(): 是否失敗 返回false 代表成功
System.out.println("批量保存文檔結果:status=" + bulk.hasFailures());
}
搜索數據
@Test
public void testSearch() throws IOException {
SearchRequest searchRequest = new SearchRequest(Indices_01);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//termQuery 精確匹配
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "小學");
//matchAllQuery 匹配所有
// MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
searchSourceBuilder.query(termQueryBuilder);
//設置高亮
// searchSourceBuilder.highlighter();
//分頁:
// searchSourceBuilder.from();
// searchSourceBuilder.size();
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
System.out.println("搜索結果:" + JSON.toJSONString(search.getHits()));
//打印命中文檔數據
SearchHits hits = search.getHits();
Arrays.stream(hits.getHits()).forEach(e -> {
System.out.println(e.getSourceAsString());
});
}