首页 > IT基础架构 > > ElasticSearch在Java中简单应用

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import java.net.InetAddress;
public class ElasticTest {
//从es中查询数据
@Test
public void test1() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//数据查询
GetResponse getResponse = transportClient.prepareGet("lib3","user","1").execute().actionGet();
System.out.println(getResponse.getSourceAsString());
transportClient.close();
}
}PUT /index_1
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 3
},
"mappings": {
"blog": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
},
"postdate": {
"type": "date"
},
"url": {
"type": "text"
}
}
}
}
}PUT /index_1/blog/10
{
"id":"1",
"title":"Java设计模式",
"content":"Java设计模式详解与案例",
"postdate":"2018-05-20",
"url":"https://www.baidu.com"
}
GET /index_1/blog/10//添加文档
@Test
public void test2() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//添加文档
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
.startObject()
.field("id", "1")
.field("title", "精通Java")
.field("content","精通Java之路")
.field("postdate","2019-09-26")
.field("url","https://biadu.com")
.endObject();
IndexResponse response = transportClient.prepareIndex("index_1","blog","1")
.setSource(xContentBuilder).get();
System.out.println(response.status());
transportClient.close();
}//删除文档
@Test
public void test3() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//删除文档
DeleteResponse response = transportClient.prepareDelete("index_1","blog","10").get();
System.out.println(response.status());
transportClient.close();
}//更新文档 post方式
@Test
public void test4() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//更新文档
UpdateRequest request = new UpdateRequest();
request.index("index_1")
.type("blog")
.id("1")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title","单例设计模式")
.endObject()
);
UpdateResponse response = transportClient.update(request).get();
System.out.println(response.status());
transportClient.close();
}//更新文档 upsert方式
@Test
public void test5() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//添加文档
IndexRequest request1 = new IndexRequest("index_1","blog","8")
.source(
XContentFactory.jsonBuilder()
.startObject()
.field("id", "8")
.field("title", "精通Java8")
.field("content","精通Java8之路")
.field("postdate","2019-09-26")
.field("url","https://biadu.com")
.endObject()
);
UpdateRequest request2 = new UpdateRequest("index_1","blog","8")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title","精通Java9")
.endObject()
).upsert(request1);
UpdateResponse response = transportClient.update(request2).get();
System.out.println(response.status());
transportClient.close();
}//批量查询文档
@Test
public void test6() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//批量查询文档
MultiGetResponse response = transportClient.prepareMultiGet()
.add("index_1","blog","8","10")
.add("lib3","user","1","2","3")
.get();
for(MultiGetItemResponse itemResponse:response){
GetResponse gr = itemResponse.getResponse();
if(gr!=null && gr.isExists()){
System.out.println(gr.getSourceAsString());
}
}
transportClient.close();
}//批量添加文档
@Test
public void test7() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//批量添加文档
BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();
//第一个
bulkRequestBuilder.add(transportClient.prepareIndex("lib2","books","8")
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title","python")
.field("price",99)
.endObject()
)
);
//第二个
bulkRequestBuilder.add(transportClient.prepareIndex("lib2","books","9")
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title","AI")
.field("price",199)
.endObject()
)
);
//返回结果
BulkResponse response = bulkRequestBuilder.get();
System.out.println(response.status());
if(response.hasFailures()){
System.err.println("添加失败!");
}
transportClient.close();
}//删除匹配的文档
@Test
public void test8() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
BulkByScrollResponse response = DeleteByQueryAction.INSTANCE
.newRequestBuilder(transportClient)
.filter(QueryBuilders.matchQuery("title","单例"))
.source("index_1")
.get();
//删除的条数
long counts = response.getDeleted();
System.out.println(counts);
transportClient.close();
}//查询所有
@Test
public void test9() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
//查询所有
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//match查询
@Test
public void test10() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//match查询
QueryBuilder queryBuilder = QueryBuilders.matchQuery("interests","跑步");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//multimath查询
@Test
public void test11() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//multimath查询
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("跑步","interests","address");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//term查询
@Test
public void test12() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//term查询
QueryBuilder queryBuilder = QueryBuilders.termQuery("interests","乐");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//terms查询
@Test
public void test13() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//terms查询
QueryBuilder queryBuilder = QueryBuilders.termsQuery("interests","乐","跑");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}@Test
public void test14() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//Range查询
/*QueryBuilder queryBuilder = QueryBuilders.rangeQuery("birthday")
.from("2011-01-01")
.to("2013-01-01")
.format("yyyy-MM-dd");*/
//Prefix查询
//QueryBuilder queryBuilder = QueryBuilders.prefixQuery("name","明");
//Wildcard通配符查询
//QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name","明*");
//Fuzzy糊查询
QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("interests","唱");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.setSize(3)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}@Test
public void test14() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//type查询
QueryBuilder queryBuilder = QueryBuilders.typeQuery("blog");
SearchResponse searchResponse = transportClient.prepareSearch("index_1")
.setQuery(queryBuilder)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//ids查询
@Test
public void test14_1() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//ids查询
QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1","3");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}
}
transportClient.close();
}//聚合查询
@Test
public void test15() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//聚合查询
//查询最大年龄
/*AggregationBuilder aggregationBuilder = AggregationBuilders.max("aggMax").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.addAggregation(aggregationBuilder)
.get();
Max max = searchResponse.getAggregations().get("aggMax");
System.out.println(max.getValue());*/
//查询最小年龄
/*AggregationBuilder aggregationBuilder = AggregationBuilders.min("aggMin").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.addAggregation(aggregationBuilder)
.get();
Min min = searchResponse.getAggregations().get("aggMin");
System.out.println(min.getValue());*/
//查询平均年龄
/*AggregationBuilder aggregationBuilder = AggregationBuilders.avg("aggAvg").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.addAggregation(aggregationBuilder)
.get();
Avg avg = searchResponse.getAggregations().get("aggAvg");
System.out.println(avg.getValue());*/
//查询年龄总合
/*AggregationBuilder aggregationBuilder = AggregationBuilders.sum("aggSum").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.addAggregation(aggregationBuilder)
.get();
Sum sum = searchResponse.getAggregations().get("aggSum");
System.out.println(sum.getValue());*/
//查询基数(互不相同)
AggregationBuilder aggregationBuilder = AggregationBuilders.cardinality("aggCardinality").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.addAggregation(aggregationBuilder)
.get();
Cardinality cardinality = searchResponse.getAggregations().get("aggCardinality");
System.out.println(cardinality.getValue());
transportClient.close();
}//query string
@Test
public void test16() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//全文检索
//QueryBuilder queryBuilder = QueryBuilders.commonTermsQuery("name","明");
//精确查询,+必须含有 -不含有
//QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("+明 -小");
//或条件查询,满足其中一个
QueryBuilder queryBuilder = QueryBuilders.simpleQueryStringQuery("+明 -小");
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
/* Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}*/
}
transportClient.close();
}//组合查询
@Test
public void test17() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
/*QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("interests","唱"))
.mustNot(QueryBuilders.matchQuery("interests","步"))
.should(QueryBuilders.matchQuery("address","深圳"))
.filter(QueryBuilders.rangeQuery("birthday").gte("2000-10-10").format("yyyy-MM-dd"));*/
QueryBuilder queryBuilder = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","晚"));
SearchResponse searchResponse = transportClient.prepareSearch("lib3")
.setQuery(queryBuilder)
.get();
SearchHits searchHits = searchResponse.getHits();
//遍历记录
for(SearchHit hit : searchHits){
System.out.println(hit.getSourceAsString());
/* Map<String,Object> map = hit.getSourceAsMap();
for(String key:map.keySet()){
System.out.println(key+"="+map.get(key));
}*/
}
transportClient.close();
}@Test
public void test18() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//统计年龄 人数
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("terms").field("age");
SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();
Terms terms = searchResponse.getAggregations().get("terms");
for(Terms.Bucket entry : terms.getBuckets()){
System.out.println(entry.getKey()+":"+entry.getDocCount());
}
transportClient.close();
}@Test
public void test18_1() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//统计年龄 人数
QueryBuilder queryBuilder = QueryBuilders.termQuery("age",18);
AggregationBuilder aggregationBuilder = AggregationBuilders.filter("filter",queryBuilder);
SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();
Filter filter = searchResponse.getAggregations().get("filter");
System.out.println(filter.getDocCount());
transportClient.close();
}@Test
public void test18_2() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//条件组合查询,统计记录数
AggregationBuilder aggregationBuilder = AggregationBuilders.filters("filters",
new FiltersAggregator.KeyedFilter("唱",QueryBuilders.termQuery("interests","唱")),
new FiltersAggregator.KeyedFilter("步",QueryBuilders.termQuery("interests","步")));
SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();
Filters filters = searchResponse.getAggregations().get("filters");
for (Filters.Bucket entry:filters.getBuckets()){
System.out.println(entry.getKey()+":"+entry.getDocCount());
}
transportClient.close();
}唱:3
步:3@Test public void test18_3() throws Exception { //指定ES集群 Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//范围条件组合查询,统计记录数
AggregationBuilder aggregationBuilder = AggregationBuilders
.range("range")
.field("age")
.addUnboundedTo(50) //(,to)
.addRange(25,50) //[from,to)
.addUnboundedFrom(25); //[from,)
SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();
Range r = searchResponse.getAggregations().get("range");
for (Range.Bucket entry:r.getBuckets()){
System.out.println(entry.getKey()+":"+entry.getDocCount());
}
transportClient.close();
}*-50.0:4
25.0-50.0:3
25.0-*:3@Test
public void test18_4() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
//统计价格为null
AggregationBuilder aggregationBuilder = AggregationBuilders.missing("missing")
.field("price");
SearchResponse searchResponse = transportClient.prepareSearch("lib2").addAggregation(aggregationBuilder).execute().actionGet();
Aggregation aggregation = searchResponse.getAggregations().get("missing");
System.out.println(aggregation.toString());
transportClient.close();
}{"missing":{"doc_count":1}}//集群管理
@Test
public void test19() throws Exception {
//指定ES集群
Settings settings = Settings.builder().put("cluster.name","my-application").build();
//创建访问es服务器的客户端
TransportClient transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));
ClusterHealthResponse clusterHealthResponse = transportClient.admin().cluster().prepareHealth().get();
String clusterName = clusterHealthResponse.getClusterName();
System.out.println("clusterName="+clusterName);
int numberOfDataNodes = clusterHealthResponse.getNumberOfDataNodes();
System.out.println("numberOfDataNodes="+numberOfDataNodes);
int numberOfNodes = clusterHealthResponse.getNumberOfNodes();
System.out.println("numberOfNodes="+numberOfNodes);
for(ClusterIndexHealth health : clusterHealthResponse.getIndices().values()){
String index = health.getIndex();
int numberOfShards = health.getNumberOfShards();
int numberOfReplicas = health.getNumberOfReplicas();
System.out.printf("index=%s,numberOfShards=%d,numberOfReplicas=%d\n",index,numberOfShards,numberOfReplicas);
ClusterHealthStatus status = health.getStatus();
System.out.println(status);
}
transportClient.close();
}来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3128262/ ,如需转载,请注明出处,否则将追究法律责任。