package com.young.test;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
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.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.*;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.filter.Filter;
import org.elasticsearch.search.aggregations.bucket.filter.Filters;
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator;
import org.elasticsearch.search.aggregations.bucket.range.Range;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
import org.elasticsearch.search.aggregations.metrics.cardinality.CardinalityAggregationBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.concurrent.ExecutionException;
public class EsDemo {
//从es中查询数据
@Test
public void test1() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
//数据查询
GetResponse response = client.prepareGet("lib3", "user", "2").execute().actionGet();
//得到查询出的数据
System.out.println(response.getSourceAsString());
client.close();
}
@Test
public void test2() throws IOException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
//添加文档
XContentBuilder doc = XContentFactory.jsonBuilder()
.startObject()
.field("id", "1")
.field("title", "Java设计模式之装饰模式")
.field("content", "在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。")
.field("postdate", "2018-05-20")
.field("url", "csdn.net/79239072")
.endObject();
//添加文档
IndexResponse response = client
.prepareIndex("index1", "blog", "1")
.setSource(doc)
.get();
System.out.println(response.status());
}
//删除文档
@Test
public void test3() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
//删除文档
DeleteResponse deleteResponse = client.prepareDelete("index1", "blog", "10").get();
System.out.println(deleteResponse.status());
}
//更新文档
@Test
public void test4() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
UpdateRequest request = new UpdateRequest();
request.index("index1")
.type("blog")
.id("1")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title", "单例设计模式")
.endObject()
);
UpdateResponse updateResponse = client.update(request).get();
System.out.println(updateResponse.status());
}
//upsert
@Test
public void test5() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
//添加文档
IndexRequest request1 = new IndexRequest("index1", "blog", "2")
.source(
XContentFactory.jsonBuilder()
.startObject()
.field("id", "2")
.field("title", "Java设计模式之工厂模式")
.field("content", "静态工厂,实例工厂")
.field("postdate", "2018-05-20")
.field("url", "csdn.net/79239072")
.endObject()
);
UpdateRequest request = new UpdateRequest("index1", "blog", "2")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title", "设计模式")
.endObject()
).upsert(request1);
UpdateResponse updateResponse = client.update(request).get();
System.out.println(updateResponse.status());
}
//mget批量查询
@Test
public void test6() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
MultiGetResponse response = client.prepareMultiGet()
.add("index1", "blog", "1", "2")
.add("lib3", "user", "1", "2", "3")
.get();
for (MultiGetItemResponse item : response) {
GetResponse gr = item.getResponse();
if (gr != null && gr.isExists()) {
System.out.println(gr.getSourceAsString());
}
}
}
//bulk批量查询
@Test
public void test7() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.80.188"), 9300));
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
//批量添加
bulkRequestBuilder.add(client.prepareIndex("lib2", "books", "8")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("title", "python")
.field("price", 99)
.endObject()
)
);
bulkRequestBuilder.add(client.prepareIndex("lib2", "books", "9")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("title", "vr")
.field("price", 29)
.endObject()
)
);
BulkResponse response = bulkRequestBuilder.get();
System.out.println(response.status());
}
//查询删除
@Test
public void test8() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
BulkByScrollResponse response = DeleteByQueryAction.INSTANCE
.newRequestBuilder(client)
.filter(QueryBuilders.matchQuery("title", "工厂"))
.source("index1")
.get();
//删除文档的个数
long deleted = response.getDeleted();
System.out.println(deleted);
}
//match_all
@Test
public void test9() throws IOException, ExecutionException, InterruptedException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchResponse sr = client.prepareSearch("lib3")
.setQuery(qb)
.setSize(3)
.get();
SearchHits hits = sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> map = hit.getSourceAsMap();
for (String s : map.keySet()) {
System.out.println(s + ":" + map.get(s));
}
}
}
//match
@Test
public void test10() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
QueryBuilder builder = QueryBuilders.matchQuery("interests", "changge");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> map = hit.getSourceAsMap();
for (String s : map.keySet()) {
System.out.println(s + ":" + map.get(s));
}
}
}
//multiMatchQuery
@Test
public void test11() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
QueryBuilder builder = QueryBuilders.multiMatchQuery("changge", "address", "interests");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> map = hit.getSourceAsMap();
for (String s : map.keySet()) {
System.out.println(s + ":" + map.get(s));
}
}
}
//term查询
@Test
public void test12() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
QueryBuilder builder = QueryBuilders.termQuery("interests", "changge");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(builder)
.setSize(2)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String s : sourceAsMap.keySet()) {
System.out.println(s + ":" + sourceAsMap.get(s));
}
}
}
//terms查询
@Test
public void test13() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("interests", "changge", "lvyou");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(termsQueryBuilder)
.setSize(2)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
//各种查询
@Test
public void test14() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
//range查询
//QueryBuilder builder = QueryBuilders.rangeQuery("birthday").from("1990-01-01").to("2000-12-30").format("yyyy-MM-dd");
//prefix查询
//QueryBuilder builder = QueryBuilders.prefixQuery("name", "zhao");
//wildcard查询
//QueryBuilder builder = QueryBuilders.wildcardQuery("name", "zhao*");
//fuzzy查询
//QueryBuilder builder = QueryBuilders.fuzzyQuery("interests", "chagge");
//type查询,index:index1
//QueryBuilder builder = QueryBuilders.typeQuery("blog");
//ids查询
QueryBuilder builder = QueryBuilders.idsQuery().addIds("1", "2", "3");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(builder)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
//聚合查询
@Test
public void test15() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
// AggregationBuilder agg = AggregationBuilders.max("aggMax").field("age");
//
// SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
//
// Max max = response.getAggregations().get("aggMax");
//
// double value = max.getValue();
//
// System.out.println(value);
// MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("aggMin").field("age");
// SearchResponse response = client.prepareSearch("lib3").addAggregation(minAggregationBuilder).get();
// Min min = response.getAggregations().get("aggMin");
// double value = min.getValue();
// System.out.println(value);
// AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("aggAvg").field("age");
// SearchResponse response = client.prepareSearch("lib3").addAggregation(avgAggregationBuilder).get();
// Avg avg = response.getAggregations().get("aggAvg");
// System.out.println(avg.getValue());
// SumAggregationBuilder sumAggregationBuilder =
// AggregationBuilders.sum("aggSum").field("age");
// SearchResponse response = client.prepareSearch("lib3").addAggregation(sumAggregationBuilder).get();
// Sum sum = response.getAggregations().get("aggSum");
// System.out.println(sum.getValue());
CardinalityAggregationBuilder cardinalityAggregationBuilder =
AggregationBuilders.cardinality("aggCardinality").field("age");
SearchResponse response = client.prepareSearch("lib3").addAggregation(cardinalityAggregationBuilder).get();
Cardinality cardinality = response.getAggregations().get("aggCardinality");
System.out.println(cardinality.getValue());
}
//query string
@Test
public void test16() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
//QueryBuilder builder = QueryBuilders.commonTermsQuery("name", "zhaoliu");
//QueryBuilder builder = QueryBuilders.queryStringQuery("+changge -hejiu");
QueryBuilder builder = QueryBuilders.simpleQueryStringQuery("+changge -hejiu");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
//组合查询
@Test
public void test17() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
// QueryBuilder builder = QueryBuilders.boolQuery()
// .must(QueryBuilders.matchQuery("interests","changge"))
// .mustNot(QueryBuilders.matchQuery("interests","lvyou"))
// .should(QueryBuilders.matchQuery("address","beijing"))
// .filter(QueryBuilders.rangeQuery("birthday").gte("1990-01-01").format("yyyy-MM-dd"));
//constantscore
QueryBuilder builder = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "zhaoliu"));
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
//分组聚合
@Test
public void test18() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
AggregationBuilder agg = AggregationBuilders.terms("terms").field("age");
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Terms terms = response.getAggregations().get("terms");
for (Terms.Bucket bucket : terms.getBuckets()) {
System.out.println(bucket.getKey() + ":" + bucket.getDocCount());
}
}
//filter聚合
@Test
public void test19() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
QueryBuilder query = QueryBuilders.termQuery("age", 20);
AggregationBuilder agg = AggregationBuilders.filter("filter", query);
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Filter filter = response.getAggregations().get("filter");
System.out.println(filter.getDocCount());
}
//filters聚合
@Test
public void test20() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
AggregationBuilder agg = AggregationBuilders.filters("filters",
new FiltersAggregator.KeyedFilter("changge",QueryBuilders.termQuery("interests","changge")),
new FiltersAggregator.KeyedFilter("hejiu",QueryBuilders.termsQuery("interests","hejiu"))
);
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Filters filters = response.getAggregations().get("filters");
for (Filters.Bucket bucket : filters.getBuckets()) {
System.out.println(bucket.getKey()+":"+bucket.getDocCount());
}
}
//范围聚合
@Test
public void test21() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
AggregationBuilder agg = AggregationBuilders
.range("range")
.field("age")
.addUnboundedTo(50)//(,to)
.addRange(25,50)//[fro,to)
.addUnboundedFrom(25);//[from,)
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Range r = response.getAggregations().get("range");
for (Range.Bucket bucket : r.getBuckets()) {
System.out.println(bucket.getKey()+":"+bucket.getDocCount());
}
}
//missing聚合
@Test
public void test22() throws UnknownHostException {
//指定ES集群
Settings settings = Settings.builder()
.put("cluster.name", "my-application")
.build();
//创建访问es服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(
new TransportAddress(InetAddress.getByName("192.168.80.188"),
9300));
AggregationBuilder agg = AggregationBuilders.missing("missing").field("price");
SearchResponse response = client.prepareSearch("lib4").addAggregation(agg).execute().actionGet();
Aggregation aggregation = response.getAggregations().get("missing");
System.out.println(aggregation.toString());
}
}
在Java中实现操作
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...