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("全部执行成功"); } }
代码也比较简单 很好理解!!!
