使用Elasticsearch的java api,操作elasticsearch,elasticsearchapi
本应用使用的maven,java8。
依赖的jar包:
<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>
package com.elasticsearch;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
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.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
/**
* 员工增删改查的应用程序
* Created by liyongguan on 2017/12/19.
*
*/
public class EmployeeCRUDApp {
public static void main(String[] args) throws Exception{
Settings settings = Settings.builder()
.put("cluster.name","es").build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.16.36.120"),9300));
// addEmploy(client);
// undateEmployee(client);
// delEmployee(client);
// getEmployee(client);
client.close();
}
public static void addEmploy(TransportClient client) throws Exception{
XContentBuilder builder = XContentFactory.jsonBuilder().startObject()
.field("name","zhangsan")
.field("age",27)
.field("position","technique english")
.field("country","China")
.field("join_date","2017-01-01")
.field("salary","10000")
.endObject();
IndexResponse response = client.prepareIndex("company","employee","6")
.setSource(builder).get();
System.out.println(response.getResult());
}
public static void delEmployee(TransportClient client){
DeleteResponse response = client.prepareDelete("company","employee","6").get();
System.out.println(response.getResult());
}
public static void undateEmployee(TransportClient client) throws Exception{
XContentBuilder builder = XContentFactory.jsonBuilder().startObject()
.field("name","lisi").endObject();
UpdateResponse response = client.prepareUpdate("company","employee","6")
.setDoc(builder).get();
System.out.println(response.getResult());
}
public static void getEmployee(TransportClient client){
GetResponse response = client.prepareGet("company","employee","6").get();
System.out.println(response.getSourceAsString());
}
}
ElasticSearch的查询:
package com.elasticsearch;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
/**
* Created by liyongguan on 2017/12/19.
* 员工搜索应用app
*/
public class EmployeeSearchApp {
public static void main(String[] args) throws Exception{
Settings seeting = Settings.builder().put("cluster.name","es").build();
TransportClient client = new PreBuiltTransportClient(seeting)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.16.36.120"),9300));
prepareData(client);
//executeSearch(client);
client.close();
}
/**
* 添加数据
* @param client
* @throws Exception
*/
public static void prepareData(TransportClient client)throws Exception{
XContentBuilder builder1 = XContentFactory.jsonBuilder().startObject()
.field("name","jack")
.field("age",27)
.field("position","technique software")
.field("country","China")
.field("join_date","2017-01-01")
.field("salary","10000")
.endObject();
client.prepareIndex("company","employee","1").setSource(builder1).get();
XContentBuilder builder2 = XContentFactory.jsonBuilder().startObject()
.field("name", "marry")
.field("age", 35)
.field("position", "technique manager")
.field("country", "china")
.field("join_date", "2017-01-01")
.field("salary", 12000)
.endObject();
client.prepareIndex("company","employee","2").setSource(builder2).get();
XContentBuilder builder3 = XContentFactory.jsonBuilder().startObject()
.field("name", "tom")
.field("age", 32)
.field("position", "senior technique software")
.field("country", "china")
.field("join_date", "2016-01-01")
.field("salary", 11000)
.endObject();
client.prepareIndex("company","employee","3").setSource(builder3).get();
XContentBuilder builder4 = XContentFactory.jsonBuilder().startObject()
.field("name", "jen")
.field("age", 25)
.field("position", "junior finance")
.field("country", "usa")
.field("join_date", "2016-01-01")
.field("salary", 7000)
.endObject();
client.prepareIndex("company","employee","4").setSource(builder4).get();
XContentBuilder builder5 = XContentFactory.jsonBuilder().startObject()
.field("name", "mike")
.field("age", 37)
.field("position", "finance manager")
.field("country", "usa")
.field("join_date", "2015-01-01")
.field("salary", 15000)
.endObject();
client.prepareIndex("company","employee","5").setSource(builder5).get();
}
/**
* 搜索
* @param client
*/
public static void executeSearch(TransportClient client){
MatchQueryBuilder builder = QueryBuilders.matchQuery("position","technique");
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").from(30).to(40);
SearchResponse response = client.prepareSearch("company").setTypes("employee").setQuery(builder)
.setPostFilter(rangeQueryBuilder)
.setFrom(0).setSize(1).get();
SearchHit[] hits = response.getHits().getHits();
System.out.println(1234);
for(int i = 0;i<hits.length;i++){
System.out.println(hits[i].getSourceAsString());
}
}
}
Elasticsearch的聚合查询:
package com.elasticsearch;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;
/**
* Created by liyongguan on 2017/12/19.
* 分组查询
* 先按照年分组,然后在国家分组内再按照入职日期分组,最后计算分组后的平均薪水
*/
public class EmployeeAggrApp {
public static void main(String[] args) throws Exception{
Settings settings = Settings.builder()
.put("cluster.name","es").build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.16.36.120"),9300));
SearchResponse response = client.prepareSearch("company")
.addAggregation(AggregationBuilders.terms("group_by_country").field("country")
.subAggregation(AggregationBuilders.dateHistogram("group_by_join_date").field("join_date")
.dateHistogramInterval(DateHistogramInterval.YEAR)
.subAggregation(AggregationBuilders.avg("avg_salary").field("salary"))))
.execute().get();
Map<String,Aggregation> map = response.getAggregations().asMap();
StringTerms groupByCountry = (StringTerms) map.get("group_by_country");
Iterator<Bucket> groupByCountryBucketIterator = groupByCountry.getBuckets().iterator();
while (groupByCountryBucketIterator.hasNext()){
Bucket groupByCountryBucket = groupByCountryBucketIterator.next();
System.out.println(groupByCountryBucket.getKey()+":"+groupByCountryBucket.getDocCount());
Histogram groupByJoinDate = (Histogram) groupByCountryBucket.getAggregations().asMap().get("group_by_join_date");
Iterator<Histogram.Bucket> hisBucket = groupByJoinDate.getBuckets().iterator();
while (hisBucket.hasNext()){
Histogram.Bucket groupByJoinDateBucket = hisBucket.next();
System.out.println(groupByJoinDateBucket.getKey() + ":" +groupByJoinDateBucket.getDocCount());
Avg avg = (Avg) groupByJoinDateBucket.getAggregations().asMap().get("avg_salary");
System.out.println(avg.getValue());
}
}
System.out.println();
client.close();
}
}
源码地址:https://github.com/1264984332/elasticsearch
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。