Java操作Elasticsearch
今天呢,發一篇JAVA操作ES搜索引擎的代碼吧!
創建工程就不說了
Maven工程:加入Maven依賴!!!
pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.3</version>
</dependency>
JUnit測試首先連接:
/**
* Title: testConnection
* Description: 測試連接
*/
TransportClient client = null;
@Before
public void connection(){
//設置一些屬性
//Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name","elasticsearch").build();
// 獲取一個客戶端對象
client = new TransportClient();//new TransportClient(settings);
// 指定連接的Es節點Ip和端口 端口默認使用 9300
TransportAddress transportAddress = new InetSocketTransportAddress("cloudera",9300);
client.addTransportAddress(transportAddress);
// 獲取客戶端 連接上的節點信息
ImmutableList<DiscoveryNode> nodes = client.connectedNodes();
for (DiscoveryNode discoveryNode : nodes) {
System.out.println(discoveryNode.getHostAddress()+"\t"+discoveryNode.getHostName());
}
}
上面用到的核心類:TransportClient
定義兩個常量 方便之後的操作:
private final static String INDEX = "test";
private final static String TYPE = "emp";
上面是索引庫的位置 和 類型
創建索引:有4種方法 下面給出代碼
/**
*
* Title: creatIndex1
* Description:創建索引___JSON
*/
@Test
public void creatIndex1() {
String jsonstr = "{\"name\":\"Baby\",\"address\":\"jx\",\"age\":23}";
IndexResponse response = client.prepareIndex(INDEX, TYPE, "3")//
.setSource(jsonstr).execute()//
.actionGet();
System.out.println(response.getId());
}
/**
*
* Title: creatIndex2
* Description:創建索引___Map
*/
@Test
public void creatIndex2() {
Map<String, Object> source = new HashMap<String, Object>();
source.put("name", "ww");
source.put("age", 20);
source.put("address", "SH");
IndexResponse response = client.prepareIndex(INDEX, TYPE)//
.setSource(source).execute()//
.actionGet();
System.out.println(response.getId());
}
/**
*
* Title: creatIndex3
* Description:創建索引___Bean-->工具類轉JSON
* @throws JsonProcessingException
*/
@Test
public void creatIndex3() throws Exception {
Person person = new Person();
person.setName("JSQ");
person.setAge(21);
person.setAddress("JL");
ObjectMapper mapper = new ObjectMapper();
IndexResponse response = client.prepareIndex(INDEX, TYPE)//
.setSource(mapper.writeValueAsString(person)).execute()//
.actionGet();
System.out.println(response.getId());
}
/**
*
* Title: creatIndex4
* Description:創建索引___工具類 XContentBuilder
* @throws JsonProcessingException
*/
@Test
public void creatIndex4() throws Exception {
XContentBuilder builder = XContentFactory.jsonBuilder()//
.startObject()// {
.field("name", "test")// "name":"test"
.field("age", 31)//
.endObject();// }
IndexResponse response = client.prepareIndex(INDEX, TYPE)//
.setSource(builder).execute()//
.actionGet();
System.out.println(response.getId());
}
根據ID讀取索引
/**
*
* Title: getIndex
* Description:查詢
*/
@Test
public void getIndexByID(){
GetResponse get = client.prepareGet(INDEX, TYPE, "1").execute().actionGet();
System.out.println(get.getSourceAsString());
}
更新操作:
/**
*
* Title: getIndex
* Description:更新1
* @throws IOException
*/
@Test
public void Update() throws Exception {
XContentBuilder builder = XContentFactory.jsonBuilder()//
.startObject()// {
.field("name", "qwer")// "name":"test"
.field("age", 16)//
.endObject();// }
UpdateResponse response = client.prepareUpdate(INDEX, TYPE, "AVZ_sjFPSKhvuiHi4K8Z").setDoc(builder).execute().actionGet();
System.out.println(response.getVersion());
}
/**
*
* Title: getIndex
* Description:更新2
*
* @throws Exception
*/
@Test
public void Update2() throws Exception {
UpdateRequest request = new UpdateRequest(INDEX, TYPE, "AVZ_sjG3SKhvuiHi4K8a");
request.doc(XContentFactory.jsonBuilder().startObject().field("age", 18).endObject());
UpdateResponse response = client.update(request).get();
System.out.println(response.getVersion());
}
/**
*
* Title: UpdateOrCreate
* Description: 更新或者插入
* @throws Exception
*/
@Test
public void UpdateOrCreate() throws Exception {
UpdateRequest request = new UpdateRequest(INDEX, TYPE, "4");
XContentBuilder builder = XContentFactory.jsonBuilder()//
.startObject()// {
.field("name", "adfg")// "name":"test"
.field("age", 66)//
.endObject();// }
request.doc(builder);
request.upsert(builder);
UpdateResponse response = client.update(request).get();
System.out.println(response.getVersion());
}
/**
*
* Title: UpdateOrCreate
* Description: 刪除1
* @throws Exception
*/
@Test
public void delete() throws Exception {
DeleteRequest request = new DeleteRequest(INDEX, TYPE, "AVZ9SoaeqXbhzyjETmWC");
DeleteResponse response = client.delete(request ).get();
System.out.println("版本:"+response.getVersion());
}
/**
*
* Title: UpdateOrCreate
* Description: 刪除2
* @throws Exception
*/
@Test
public void delete2() throws Exception {
DeleteResponse response = client.prepareDelete(INDEX, TYPE, "1").execute().actionGet();
System.out.println("版本:"+response.getVersion());
}
求索引總數:
/**
*
* Title: QueryCount
* Description: 求總數
* @throws Exception
*/
@Test
public void QueryCount() throws Exception {
long l = client.prepareCount(INDEX).execute().get().getCount();
System.out.println("總數:"+l);
}
批量操作:
/**
*
* Title: testBulk
* Description:批量操作
*/
@Test
public void testBulk(){
BulkRequestBuilder bulk = client.prepareBulk();
//創建索引
IndexRequest request1 = new IndexRequest(INDEX, TYPE, "101");
request1.source("{\"name\":\"test101\",\"age\":101}");
IndexRequest request2 = new IndexRequest(INDEX, TYPE, "102");
request2.source("{\"name\":\"test102\",\"age\":102}");
//刪除索引
DeleteRequest request3 = new DeleteRequest(INDEX, TYPE, "2");
bulk.add(request1);
bulk.add(request2);
bulk.add(request3);
BulkResponse response = bulk.execute().actionGet();
if(response.hasFailures()){
System.out.println("發生錯誤");
}else{
System.out.println("全部執行成功");
}
}