欢迎投稿

今日深度:

使用Elasticsearch的java api,操作elasticsearch,elasticsearchapi

使用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>


Elasticsearch的增删改查:

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


www.htsjk.Com true http://www.htsjk.com/Elasticsearch/29791.html NewsArticle 使用Elasticsearch的java api,操作elasticsearch,elasticsearchapi 本应用使用的maven,java8。 依赖的jar包: dependency groupIdorg.elasticsearch.client/groupId artifactIdtransport/artifactId version5.2.2/version /dependency...
相关文章
    暂无相关文章
评论暂时关闭