本篇內(nèi)容主要講解“如何實(shí)現(xiàn)ElasticSearch的JavaAPI”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何實(shí)現(xiàn)ElasticSearch的JavaAPI”吧!
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站與策劃設(shè)計(jì),憑祥網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:憑祥等地區(qū)。憑祥做網(wǎng)站價(jià)格咨詢:13518219792
有人說學(xué)習(xí)一項(xiàng)技術(shù)最好的資料是官方文檔,對(duì)大部分技術(shù)來說確實(shí)是這樣的。但是官方文檔不一定適合每個(gè)人去看,比如一個(gè)初學(xué)者,直接讓他看Spring的官方文檔,其實(shí)是不合適的。今天我會(huì)結(jié)合ElasticSearch的一個(gè)客戶端官方文檔介紹ES在Java中的API應(yīng)用。
官方文檔不一定好找,這里直接給出地址:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/index.html
你可以選擇自己對(duì)應(yīng)版本的文檔來參考,我這里選擇的是7.6版本,選用的是Java High Level REST Client。

首先需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目,創(chuàng)建項(xiàng)目就不介紹了,引入ES核心依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
為了防止版本問題導(dǎo)致服務(wù)器客戶端沖突,盡量將ES的版本設(shè)置的和自己安裝的服務(wù)器端版本一致:
<properties> <java.version>1.8</java.version> <elasticsearch.version>7.6.1</elasticsearch.version> </properties>
后續(xù)還會(huì)用一些json和web以及測(cè)試的操作,引入這些依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency>
編寫個(gè)配置類注入restHighLevelClient對(duì)象:
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client=new RestHighLevelClient(
RestClient.builder(
new HttpHost("192.168.78.128",9200,"http")
)
);
return client;
}
}后續(xù)會(huì)用到實(shí)體類,這里先提供了:
@Data
@AllArgsConstructor
public class User {
private String name;
private String address;
}接下來的操作都在SpringBootTest中進(jìn)行,首先通過@Autowired注入
RestHighLevelClient 對(duì)象
@SpringBootTest
class ElasticsearchdemoApplicationTests {
@Autowired
private RestHighLevelClient restHighLevelClient;
}還是按照學(xué)習(xí)ES語法的順序?qū)W習(xí)語法,找到索引API ,API中的操作很多,我主要選一些重要的講一下

創(chuàng)建索引的主要對(duì)象是CreateIndexRequest
@Test
public void testCreateIndex() throws IOException {
//創(chuàng)建索引
CreateIndexRequest request=new CreateIndexRequest("test_index");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse.isAcknowledged());
}創(chuàng)建CreateIndexRequest對(duì)象,設(shè)置相關(guān)屬性,比如切片數(shù),副本數(shù),超時(shí)時(shí)間等等,然后通過restHighLevelClient創(chuàng)建索引,獲得一個(gè)結(jié)果響應(yīng)。
//設(shè)置分片和副本
request.settings(Settings.builder()
.put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2)
);獲取一個(gè)索引,主要對(duì)象是GetIndexRequest
@Test
public void testGetIndex() throws IOException {
//獲取索引
GetIndexRequest request=new GetIndexRequest("test_index");
GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
System.out.println(getIndexResponse);
}用的也是GetIndexRequest
@Test
public void testExistsIndex() throws IOException {
//獲取索引
GetIndexRequest request=new GetIndexRequest("test_index");
boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}刪除索引的請(qǐng)求對(duì)象是DeleteIndexRequest
@Test
public void testDeleteIndex() throws IOException {
DeleteIndexRequest request=new DeleteIndexRequest("test_index");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}對(duì)索引的操作可以通過圖形化界面來實(shí)現(xiàn),了解增刪改即可。
文檔的API分為單個(gè)文檔處理和批量文檔處理,我會(huì)介紹單個(gè)文檔的增刪改查和一個(gè)批量文檔API

在用語法創(chuàng)建文檔的時(shí)候,是這樣的:
PUT http://ip:port/索引名/類型名/文檔id
{
"name":"javayz",
"address":"hz"
}使用代碼是這樣的:請(qǐng)求對(duì)象為IndexRequest
@Test
public void testCreateDoc() throws IOException {
// PUT http://ip:port/索引名/類型名/文檔id
User user=new User("javayz","hz");
IndexRequest request=new IndexRequest("text_index");
request.id("1");
request.source(JSON.toJSONString(user), XContentType.JSON);
IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(index.status());
}其實(shí)兩者十分相似,這也是學(xué)技術(shù)要先學(xué)基礎(chǔ)的原因。有了基礎(chǔ)一看就懂。
獲取文檔和判斷是否存在這里放在一起寫,請(qǐng)求對(duì)象都是GetRequest :
@Test
public void testGetDoc() throws IOException{
GetRequest request=new GetRequest("text_index");
request.id("1");
boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
if (exists){
GetResponse documentFields = restHighLevelClient.get(request, RequestOptions.DEFAULT);
String sourceAsString = documentFields.getSourceAsString();
System.out.println(sourceAsString);
}else{
System.out.println(exists);
}
}更新文檔的請(qǐng)求對(duì)象是UpdateRequest
@Test
public void testUpdateDoc() throws IOException{
UpdateRequest request=new UpdateRequest("text_index","1");
User user=new User("javayz2","hz");
request.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}刪除文檔的請(qǐng)求對(duì)象是DeleteRequest
@Test
public void testDeleteDoc() throws IOException{
DeleteRequest request=new DeleteRequest("text_index","1");
DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}批量創(chuàng)建文檔用到了BulkRequest ,具體的使用方式和單體很相似,只不過是把多個(gè)請(qǐng)求聚合到一個(gè)bulk中一起提交。
@Test
public void testBulkRequest() throws IOException{
BulkRequest request=new BulkRequest();
request.timeout("10s");
ArrayList<User> list=new ArrayList<>();
list.add(new User("javayz1","hz"));
list.add(new User("javayz2","hz"));
//往BulkRequest對(duì)象中add文檔
list.stream().forEach(x->{
request.add(new IndexRequest("text_index").source(JSON.toJSONString(x),XContentType.JSON));
});
BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
System.out.println(bulk.status());
}
查詢操作用最常用的就是match(模糊查詢)和term(精確查詢),介紹最常用的查詢方式:
@Test
public void testSearch() throws IOException {
SearchRequest request = new SearchRequest("text_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//匹配條件
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "javayz1");
searchSourceBuilder.query(matchQueryBuilder);
request.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(search);
}到此,相信大家對(duì)“如何實(shí)現(xiàn)ElasticSearch的JavaAPI”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
新聞名稱:如何實(shí)現(xiàn)ElasticSearch的JavaAPI
分享鏈接:http://chinadenli.net/article14/jpeode.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)、網(wǎng)站策劃、電子商務(wù)、靜態(tài)網(wǎng)站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)