JAVA操作elasticsearch
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
import com.fasterxml.jackson.databind.ObjectMapper; import org.elasticsearch.action.bulk.BulkProcessor; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.unit.ByteSizeUnit; import org.elasticsearch.common.unit.ByteSizeValue; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.reindex.BulkIndexByScrollResponse; import org.elasticsearch.index.reindex.DeleteByQueryAction; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.Test; import java.net.InetAddress; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * Package: Description: (java 操作es) Created by byte-zbs on * 2017 05 2017/5/4 17:16. * * @version:1.0.0 */ public class ESDemo { /** * 插入操作 */ @Test public void test1() { // 集群设置 Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); // 构建json XContentBuilder builder = XContentFactory.jsonBuilder() .startObject().field("user", "国") .field("postDate", new Date()) .field("age",23) .field("message", "trying out Elastics").endObject(); // client.prepareIndex().setSource() IndexResponse indexResponse = client.prepareIndex("test", "test") .setSource(builder).get(); } catch (Exception e) { e.printStackTrace(); } } /** * 根据id查询 */ @Test public void test2() { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); GetResponse getResponse = client .prepareGet("test", "testxx", "AVvSzcIDCfxdfRyu9_r3") .setOperationThreaded(false).get(); Map<String, Object> map = getResponse.getSource(); for (String string : map.keySet()) { System.out.println(map.get(string)); } } catch (Exception e) { e.printStackTrace(); } } /** * 删除操作 */ @Test public void test3() { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); BulkIndexByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client).filter( QueryBuilders.matchQuery("user","更新名字")).source("test").get(); long l = response.getDeleted(); System.out.println(l); } catch (Exception e) { e.printStackTrace(); } } /** * 更新操作 */ @Test public void test4() { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index("test"); updateRequest.type("test"); updateRequest.id("AVvS9BWwCfxdfRyu9_sB"); updateRequest.doc(XContentFactory.jsonBuilder().startObject().field("user","更新名字").endObject()); UpdateResponse response = client.update(updateRequest).get(); } catch (Exception e) { e.printStackTrace(); } } @Test public void test5() { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); MultiGetResponse responses = client.prepareMultiGet().add("test","test","AVvS8-mRCfxdfRyu9_sA","AVvS9BWwCfxdfRyu9_sB").get(); for (MultiGetItemResponse multiGetItemResponses:responses) { GetResponse getResponse = multiGetItemResponses.getResponse(); if (getResponse.isExists()) { System.out.println(getResponse.getSourceAsString()); } } } catch (Exception e) { e.printStackTrace(); } } .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); SearchResponse searchResponse = client.prepareSearch("test").setTypes("test") .setPostFilter(QueryBuilders.rangeQuery("age").from(23).to(30)) .addSort("age", SortOrder.ASC).execute().actionGet(); System.out.println(searchResponse.toString()); } catch (Exception e) { e.printStackTrace(); } } /** * 聚合 */ @Test public void test8() { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); SearchResponse searchResponse = client.prepareSearch("test").setTypes("test") .setQuery(QueryBuilders.matchAllQuery()) .setSearchType(SearchType.QUERY_THEN_FETCH) .addAggregation(AggregationBuilders.terms("group_age") .field("age").subAggregation(AggregationBuilders.sum("sum_age").field("age")))//根据age分组,默认返回10,size(0)也是10 .get(); Terms terms = searchResponse.getAggregations().get("group_age"); List<Terms.Bucket> buckets = terms.getBuckets(); for(Terms.Bucket bt : buckets) { Sum sum = bt.getAggregations().get("sum_age"); System.out.println(sum.getValue() + "===" + sum.getName() ); } } catch (Exception e) { e.printStackTrace(); } } /** * 插入对象操作 * @param user */ public static void test9(User user) { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); ObjectMapper mapper = new ObjectMapper(); byte[] bytes = mapper.writeValueAsBytes(user); IndexResponse indexResponse = client.prepareIndex("test","test").setSource(bytes).setId("1").execute().actionGet(); System.out.println(indexResponse.status()); //CREATED } catch (Exception e) { e.printStackTrace(); } } /** * 区间查询 * @param start * @param end * @return */ public static List<String> test10(int start,int end) { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); List<String> list = new ArrayList<>(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); SearchResponse searchResponse = client.prepareSearch("test").setTypes("test").setPostFilter(QueryBuilders.rangeQuery("age")).execute().actionGet(); SearchHits searchHits = searchResponse.getHits(); SearchHit[] searchHits1 = searchHits.hits(); for (SearchHit searchHitFields:searchHits1) { list.add(searchHitFields.getSourceAsString()); } } catch (Exception e) { e.printStackTrace(); } return list; } /** * 排序 * @param age */ public static void test11(String age) { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); List<String> list = new ArrayList<>(); try { TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); SearchResponse searchResponse = client.prepareSearch("test").setTypes("test").addSort("age",SortOrder.ASC).execute().actionGet(); SearchHits searchHits = searchResponse.getHits(); SearchHit[] searchHits1 = searchHits.hits(); for (SearchHit searchHitFields:searchHits1) { System.out.println(searchHitFields.getSourceAsString()); } } catch (Exception e) { e.printStackTrace(); } } @Test public void queryNewAnswerByhours(){ try { Settings settings = Settings.builder().put("cluster.name", "mytest") .build(); TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("192.168.0.213"), 9300)); BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); SearchRequestBuilder searchRequestBuilder = client.prepareSearch("test"); searchRequestBuilder.setTypes("test"); String startTime ="2017-05-01 12:00:00"; String endTime = "2017-05-05 12:00:00"; Date date = TimeParse.stringToDate(startTime,"yyyy-MM-dd HH:mm:ss"); Date dateend = TimeParse.stringToDate(endTime,"yyyy-MM-dd HH:mm:ss"); boolQueryBuilder.must(QueryBuilders.rangeQuery("postDate").gt(date).lte(dateend)); searchRequestBuilder .setPostFilter(QueryBuilders.rangeQuery("postDate").gte(date).lte(dateend)); SearchResponse r = searchRequestBuilder.get(); SearchHits searchHits = r.getHits(); SearchHit[] SS = searchHits.hits(); for (SearchHit searchHitFields:SS) { System.out.println(searchHitFields.getSourceAsString()); } } catch (Exception e) { } /** * 分页查询 因为普通的分页仅仅是1W条数据 大量的数据获取需要scroll来获取相当于游标的方式 */ public static void queryNewAnswerByhours(TransportClient client){ SearchResponse scrollResponse = client.prepareSearch("test").setTypes("test") .setQuery(QueryBuilders.matchAllQuery()).setPostFilter(QueryBuilders.rangeQuery("time").gte("2017-05-01").lte("2017-05-07")) .setSize(10000).setScroll(TimeValue.timeValueMinutes(1)) .execute().actionGet(); long count = scrollResponse.getHits().getTotalHits(); for(int i=0,sum=0; sum<count; i++){ scrollResponse = client.prepareSearchScroll(scrollResponse.getScrollId()) .setScroll(TimeValue.timeValueMinutes(8)) .execute().actionGet(); sum += scrollResponse.getHits().hits().length; SearchHit[] SS = scrollResponse.getHits().hits(); for (SearchHit searchHitFields:SS) { System.out.println(searchHitFields.getId()); } System.out.println("总量"+count+" 已经查到"+sum); } } public static void main(String[] args) { User user = new User("虾米2-update-2",new Date(),40); test11("age"); } }