一、简介
之前写了一篇ElasticSearch的基本语法(一),现在用Java代码来将上一篇的语句实现,并且加以应用
二、代码实现
(1).连接ElasticSearch服务器的客户端
//指定集群
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
InetSocketTransportAddress inetSocketTransportAddress;
TransportClient transportClient = null;
try {
//创建访问ES服务器的客户端
inetSocketTransportAddress = new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300);
transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(inetSocketTransportAddress);
System.out.println(transportClient);
} catch (UnknownHostException e) {
e.printStackTrace();
}
下面代码中transportClient是(1)中的获取访问ElasticSearch服务器的客户端接口,并且下面代码都是我在上一篇(ElasticSearch基本语法(一))中的实例的Java代码实现,如果没看过上一篇建议去看看基本语法,不然看这篇会有点累
(2).数据查询,相当于GET test/user/id 返回JSON格式
GetResponse getResponse = transportClient.prepareGet("test", "user", "id").execute().actionGet();
System.out.println("result:" + getResponse);
(3).添加文档,相当于PUT test/user/id
//添加文档
try {
XContentBuilder document = XContentFactory.jsonBuilder()
.startObject()
.field("name", "csdn")
.field("password" , "123")
.field("age" , 10)
.endObject();
IndexResponse indexResponse = transportClient.prepareIndex("estest", "user", "1")
.setSource(document)
.get();
//输出查看是否添加成功
System.out.println(indexResponse);
} catch (IOException e) {
e.printStackTrace();
}
(4).删除文档
//删除文档
DeleteResponse deleteResponse = transportClient.prepareDelete("estest", "user", "1").get();
//输出结果查看是否删除成功
System.out.println(deleteResponse);
(5).实现POST方式的文档更新
//实现文档的更新(POSTS),普通的更新,当文档不存在会报错
UpdateRequest updateRequest = new UpdateRequest();
try {
updateRequest.index("estest")
.type("user")
.id("1")
.doc(
XContentFactory.jsonBuilder()
.startObject()
.field("name","csdn")
.field("password", "123456")
.endObject()
);
UpdateResponse updateResponse = transportClient.update(updateRequest).get();
System.out.println(updateResponse);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
(6).mget类型批量查询
//mget类型批量查询
MultiGetResponse multiGetResponse = transportClient.prepareMultiGet()
.add("estest" , "user" , "1")
.add("test" , "user" , "1" ,"2")
.get();
//遍历查看数据
for(MultiGetItemResponse item : multiGetResponse) {
GetResponse getResponse = item.getResponse();
if(getResponse !=null && getResponse.isExists()) {
System.out.println(getResponse);
}
}
(7).批量添加数据bulk类型
//批量添加数据bulk
BulkRequestBuilder bulkRequest = transportClient.prepareBulk();
try {
bulkRequest.add(transportClient.prepareIndex("estest", "user", "2")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("name" , "csdn1")
.field("password" , "123456")
.endObject()
)
);
//下面部分是根据自己批量添加多少个,我这里是添加两个
bulkRequest.add(transportClient.prepareIndex("estest", "user", "3")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("name" , "csdn2")
.field("password" , "123456")
.endObject()
)
);
BulkResponse bulkResponse = bulkRequest.get();
System.out.println(bulkResponse);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(8).match_all查询所有
//查询所有match_all
System.out.println("match_all");
QueryBuilder queryBuilder = (QueryBuilder) QueryBuilders.matchAllQuery();
SearchResponse searchResponse = transportClient.prepareSearch("estest")
.setQuery(queryBuilder)
.setSize(3).get();
SearchHits searchHits = searchResponse.getHits();
for(SearchHit hit : searchHits) {
System.out.println(hit.getSourceAsString());
//下面可以省略
Map<String,Object> map = hit.getSource();
for(String key : map.keySet()) {
System.out.println("value:" + map.get(key));
}
}
(9).match查询
System.out.println("match查询");
//match查询,有分词器
QueryBuilder queryBuilder2 = QueryBuilders.matchQuery("name", "csdn");
SearchResponse searchResponse2 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder2)
.setSize(4)
.get();
SearchHits searchHits2 = searchResponse2.getHits();
for(SearchHit hit : searchHits2) {
System.out.println(hit.getSourceAsString());
}
(10).multi_match查询
System.out.println("multi_match查询");
//multi_match查询
QueryBuilder queryBuilder3 = QueryBuilders.multiMatchQuery("csdn", "name" , "password");
SearchResponse searchResponse3 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder3)
.setSize(5)
.get();
SearchHits searchHits3 = searchResponse3.getHits();
for(SearchHit hit : searchHits3) {
System.out.println(hit.getSourceAsString());
}
(11).term查询
System.out.println("term查询");
//term查询
QueryBuilder queryBuilder4 = QueryBuilders.termQuery("name", "csdn");
SearchResponse searchResponse4 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder4)
.setSize(3)
.get();
SearchHits searchHits4 = searchResponse4.getHits();
for(SearchHit hit : searchHits4) {
System.out.println(hit.getSourceAsString());
}
(12).terms查询
System.out.println("terms查询");
//terms查询
QueryBuilder queryBuilder5 = QueryBuilders.termsQuery("name", "csdn1","csdn2");
SearchResponse searchResponse5 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder5)
.setSize(3)
.get();
SearchHits searchHits5 = searchResponse5.getHits();
for(SearchHit hit : searchHits5 ) {
System.out.println(hit.getSourceAsString());
}
(13).range范围查询
System.out.println("range查询");
//rang查询
QueryBuilder queryBuilder6 = QueryBuilders.rangeQuery("age").from("20").to("30");
SearchResponse searchResponse6 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder6)
.setSize(10)
.get();
SearchHits searchHits6 = searchResponse6.getHits();
for(SearchHit hit : searchHits6) {
System.out.println(hit.getSourceAsString());
}
(14).prefix查询
System.out.println("prefix查询");
//prefix查询
QueryBuilder queryBuilder7 = QueryBuilders.prefixQuery("name", "c");
SearchResponse searchResponse7 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder7)
.setSize(10)
.get();
SearchHits searchHits7 = searchResponse7.getHits();
for(SearchHit hit : searchHits7) {
System.out.println(hit.getSourceAsString());
}
(15).wildcard通配符查询
System.out.println("wildcard查询");
//wildcard查询
QueryBuilder queryBuilder8 = QueryBuilders.wildcardQuery("name", "*d*");
SearchResponse searchResponse8 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder8)
.setSize(10)
.get();
SearchHits searchHits8 = searchResponse8.getHits();
for(SearchHit hit : searchHits8) {
System.out.println(hit.getSourceAsString());
}
(16).fuzzy模糊查询
System.out.println("fuzzy模糊查询");
//fuzzy模糊查询
QueryBuilder queryBuilder9 = QueryBuilders.fuzzyQuery("name", "csdd");
SearchResponse searchResponse9 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder9)
.setSize(10)
.get();
SearchHits searchHits9 = searchResponse9.getHits();
for(SearchHit hit : searchHits9) {
System.out.println(hit.getSourceAsString());
}
(17).type查询
System.out.println("type查询");
//type查询
QueryBuilder queryBuilder10 = QueryBuilders.typeQuery("user");
SearchResponse searchResponse10 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder10)
.setSize(20)
.get();
SearchHits searchHits10 = searchResponse10.getHits();
for(SearchHit hit : searchHits10) {
System.out.println(hit.getSourceAsString());
}
(18).ids查询
System.out.println("ids查询");
//ids查询
QueryBuilder queryBuilder11 = QueryBuilders.idsQuery().addIds("1","2");
SearchResponse searchResponse11 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder11)
.setSize(10)
.get();
SearchHits searchHits11 = searchResponse11.getHits();
for(SearchHit hit : searchHits11) {
System.out.println(hit.getSourceAsString());
}
(19).聚合查询之求最大值
//求最大值
AggregationBuilder aggregationBuilder = AggregationBuilders.max("aggmax").field("age");
SearchResponse searchResponse12 = transportClient.prepareSearch("estest")
.addAggregation(aggregationBuilder)
.setSize(10)
.get();
Max max = searchResponse12.getAggregations().get("aggmax");
System.out.println("最大值:" + max.getValue());
(20).聚合查询之求最小值
//求最小值
AggregationBuilder aggregationBuilder2 = AggregationBuilders.min("aggmin").field("age");
SearchResponse searchResponse13 = transportClient.prepareSearch("estest")
.addAggregation(aggregationBuilder2)
.setSize(10)
.get();
Min min = searchResponse13.getAggregations().get("aggmin");
System.out.println("最小值:" + min.getValue());
(21)聚合查询之求平均值
//求平均值
AggregationBuilder aggregationBuilder3 = AggregationBuilders.avg("aggavg").field("age");
SearchResponse searchResponse14 = transportClient.prepareSearch("estest")
.addAggregation(aggregationBuilder3)
.setSize(10)
.get();
Avg avg = searchResponse14.getAggregations().get("aggavg");
System.out.println("平均值:" + avg.getValue());
(22).聚合查询之求总和
//求总和
AggregationBuilder aggregationBuilder4 = AggregationBuilders.sum("aggsum").field("age");
SearchResponse searchResponse15 = transportClient.prepareSearch("estest")
.addAggregation(aggregationBuilder4)
.setSize(10)
.get();
Sum sum = searchResponse15.getAggregations().get("aggsum");
System.out.println("总和:" + sum.getValue());
(23).聚合查询之求基数
//cardinality基数
AggregationBuilder aggregationBuilder5 = AggregationBuilders.cardinality("aggcardinality").field("age");
SearchResponse searchResponse16 = transportClient.prepareSearch("estest")
.addAggregation(aggregationBuilder5)
.setSize(10)
.get();
Cardinality cardinality = searchResponse16.getAggregations().get("aggcardinality");
System.out.println("互不相同的基数(cardinality):" + cardinality.getValue());
(24).复合查询
//复合查询,应该是最常用的
System.out.println("复合查询");
QueryBuilder queryBuilder12 = QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("name", "csdn"))
.must(QueryBuilders.matchQuery("age", 10))
.should(QueryBuilders.matchQuery("password", "12345"));
SearchResponse searchResponse17 = transportClient.prepareSearch("estest")
.setQuery(queryBuilder12)
.setSize(20)
.get();
SearchHits searchHits12 = searchResponse17.getHits();
for(SearchHit hit : searchHits12) {
System.out.println(hit.getSourceAsString());
}
(25).获取ElasticSearch集群信息
//获取ES集群信息
ClusterHealthResponse healths =transportClient.admin().cluster().prepareHealth().get();
//获取ES集群的名字
String clusterName = healths.getClusterName();
System.out.println("集群名字:" + clusterName);
//获取存放数据的那些节点
int numberOfDataNodes = healths.getNumberOfDataNodes();
System.out.println("获取存放数据的那些节点:" + numberOfDataNodes);
//获取全部结点数量
int numberOfNodes = healths.getNumberOfNodes();
System.out.println("获取全部节点数量:" + numberOfNodes);
for(ClusterIndexHealth health : healths.getIndices().values()) {
//获取当前索引名称
String index = health.getIndex();
System.out.println("当前索引名称:" + index);
//获取当前索引的主分片数量
int numberOfShard = health.getNumberOfShards();
System.out.println("当前索引的主分片数量:" + numberOfShard);
//获取当前索引的副分片数量
int numberOfReplicas = health.getNumberOfReplicas();
System.out.println("当前索引的副分片数量:" + numberOfReplicas);
//获取当前集群健康状态
ClusterHealthStatus status = health.getStatus();
System.out.println("健康状态:" + status.toString());
}
版权声明:本文为weixin_42146366原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。