1. 程式人生 > >Elasticsearch5.4 Java API操作

Elasticsearch5.4 Java API操作

public class ClientFactory {
    
@SuppressWarnings({ "resource", "unchecked" })
public static Client transportClient() {
//建立client
TransportClient transportClient = null;
try {
//設定叢集名稱(配置資訊)
Settings settings = Settings.builder()
.put("cluster.name", "elasticsearch")
.build();
//建立client(新增連線地址)
transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.9.150"), 9300));
} catch (Exception e) {
e.printStackTrace();
}
return transportClient;
}    
}

===============================================================================================================

public class ElasticsearchCURD {


private Client client;


/**
* 建立一個例項。

* @param client
*/
public ElasticsearchCURD(Client client) {
this.client = client;
}


/***************** index ******************************/


/**
* 建立一個索引

* @param indexName
*            索引名
*/
public void createIndex(String indexName) {
try {
CreateIndexResponse indexResponse = this.client.admin().indices().prepareCreate(indexName).get();
// 生產環境下,一律換成 logger.info()
System.out.println(indexResponse.isAcknowledged()); // true表示建立成功
} catch (ElasticsearchException e) {
e.printStackTrace();
}
}


/**
* 給索引增加mapping。

* @param index
*            索引名
* @param type
*            mapping所對應的type
*/
public void addMapping(String index, String type) {
try {
// 使用XContentBuilder建立Mapping
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("properties").startObject()
.field("name").startObject().field("index", "not_analyzed").field("type", "string").endObject()
.field("age").startObject().field("index", "not_analyzed").field("type", "integer").endObject()
.endObject().endObject();
System.out.println(builder.string());
PutMappingRequest mappingRequest = Requests.putMappingRequest(index).source(builder).type(type);
this.client.admin().indices().putMapping(mappingRequest).actionGet();
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 刪除索引

* @param index
*            要刪除的索引名
*/
public void deleteIndex(String index) {
DeleteIndexResponse deleteIndexResponse = this.client.admin().indices().prepareDelete(index).get();
System.out.println(deleteIndexResponse.isAcknowledged()); // true表示成功
}


/******************** doc *************************************/


/**
* 建立一個文件

* @param index
*            index
* @param type
*            type
*/
public void createDoc(String index, String type, String id) {


try {
// 使用XContentBuilder建立一個doc source
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("name", "zhangsan")
.field("age", 12).endObject();


IndexResponse indexResponse = this.client.prepareIndex().setIndex(index).setType(type).setId(id) // 如果沒有設定id,則ES會自動生成一個id
.setSource(builder.string()).get();
// System.out.println(indexResponse.isCreated());
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 更新文件

* @param index
* @param type
* @param id
*/
public void updateDoc(String index, String type, String id) {
try {
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("name", "lisi").field("age", 12)
.endObject();


UpdateResponse updateResponse = this.client.prepareUpdate().setIndex(index).setType(type).setId(id)
.setDoc(builder.string()).get();
// System.out.println(updateResponse.isCreated()); // true表示成功
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 刪除一條資料

* @param index
* @param type
* @param id
*/
public void deleteDoc(String index, String type, String id) {


DeleteResponse deleteResponse = this.client.prepareDelete().setIndex(index).setType(type).setId(id).get();
// System.out.println(deleteResponse.isFound()); // true表示成功
}




/**
* 根據ID查詢一條資料記錄。

* @param id
*            要查詢資料的ID。
* @return 返回查詢出來的記錄物件的json字串。
*/
public String get(String index, String type, String id) {
GetResponse getResponse = this.client.prepareGet() // 準備進行get操作,此時還有真正地執行get操作。(與直接get的區別)
.setIndex(index) // 要查詢的
.setType(type).setId(id).get();
return getResponse.getSourceAsString();
}


/**
* 使用min聚合查詢某個欄位上最小的值。

* @param index
* @param type
*/
public void min(String index, String type) {
SearchResponse response = this.client.prepareSearch(index)
.addAggregation(AggregationBuilders.min("min").field("age")).get();


InternalMin min = response.getAggregations().get("min");
System.out.println(min.getValue());
}
}

===============================================================================================================

public class ESTests {


String indexName = "index2";
String typeName = "string";
String idName = "1"; // 預設ID為1,可根據需要在各自方法內通過區域性變數進行修改


/**
* 測試連線Elasticsearch
*/
@Test
public void testConn() {
ClientFactory clientFactory = new ClientFactory();


try {
// 搜尋資料
GetResponse response = clientFactory.transportClient().prepareGet("index", "fulltext", "1").execute()
.actionGet();
// 輸出結果
System.out.println(response.getSourceAsString());
// 關閉client
// clientFactory.transportClient().close();
} catch (Exception e) {
e.printStackTrace();
}
}


/**
* 增加(建立索引)
*/
@Test
public void testCreateIndex() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.createIndex(indexName);
}


/**
* 給索引增加mapping
*/
@Test
public void testAddMapping() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.addMapping(indexName, typeName);
}


/**
* 建立一個文件
*/
@Test
public void testCreateDoc() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
String idName = "2";
elasticsearchCURD.createDoc(indexName, typeName, idName);
}


/**
* 更新文件
*/
@Test
public void testUpdateDoc() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.updateDoc(indexName, typeName, idName);
}


/**
* 刪除一條資料
*/
@Test
public void testDeleteDoc() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.deleteDoc(indexName, typeName, idName);
}


/**
* 根據ID查詢一條資料記錄(無返回--todo)
*/
@Test
public void testGetById() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
String idName = "2";
elasticsearchCURD.get(indexName, typeName, idName);
}


/**
* 使用min聚合查詢某個欄位上最小的值
*/
@Test
public void testMin() {
ClientFactory clientFactory = new ClientFactory();
// 建立一個例項
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.min(indexName, typeName);
}


}