推薦一個SpringBoot + Vue + MyBatis 音樂網站專案
阿新 • • 發佈:2021-10-26
官方文件: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());
});
}