java链接es

https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html

 

具体参数配置

https://www.cnblogs.com/ginb/p/8716485.html

对方法进行封装

https://blog.csdn.net/ctwy291314/article/details/81218707

import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpHost;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;

public class ESHighLevelRestUtil {

    static RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(new HttpHost("x.x.x.x", 9200, "http")));

    /**
     * 验证索引是否存在
     *
     * @param index
     *            索引名称
     * @return
     * @throws Exception
     */
    public boolean indexExists(String index) throws Exception {
        GetIndexRequest request = new GetIndexRequest();
        request.indices(index);
        request.local(false);
        request.humanReadable(true);
        boolean exists = client.indices().exists(request);
        return exists;
    }

    /**
     *
     * @param index
     * @param indexType
     * @param properties
     *            结构: {name:{type:text}} {age:{type:integer}}
     * @return
     * @throws Exception
     */
    public boolean indexCreate(String index, String indexType,
                               Map<String, Object> properties) throws Exception {

        if (indexExists(index)) {
            return true;
        }
        CreateIndexRequest request = new CreateIndexRequest(index);
        request.settings(Settings.builder().put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2));

        Map<String, Object> jsonMap = new HashMap<>();
        Map<String, Object> mapping = new HashMap<>();
        mapping.put("properties", properties);
        jsonMap.put(indexType, mapping);
        request.mapping(indexType, jsonMap);

        CreateIndexResponse createIndexResponse = client.indices().create(request);
        boolean acknowledged = createIndexResponse.isAcknowledged();
        return acknowledged;
    }

    /**
     * 删除索引
     *
     * @param index
     * @return
     * @throws Exception
     */
    public boolean indexDelete(String index) throws Exception {
        try {
            DeleteIndexRequest request = new DeleteIndexRequest(index);
            DeleteIndexResponse deleteIndexResponse = client.indices().delete(request);
            return deleteIndexResponse.isAcknowledged();
        } catch (ElasticsearchException exception) {
            if (exception.status() == RestStatus.NOT_FOUND) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * 创建更新文档
     *
     * @param index
     * @param indexType
     * @param documentId
     * @param josonStr
     * @return
     * @throws Exception
     */
    public boolean documentCreate(String index, String indexType,
                                  String documentId, String josonStr) throws Exception {
        IndexRequest request = new IndexRequest(index, indexType, documentId);

        request.source(josonStr, XContentType.JSON);
        IndexResponse indexResponse = client.index(request);

        if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
                || indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
            return true;
        }
        ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
        if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
            return true;
        }
        if (shardInfo.getFailed() > 0) {
            for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
                    .getFailures()) {
                throw new Exception(failure.reason());
            }
        }
        return false;
    }

    /**
     * 创建更新索引
     *
     * @param index
     * @param indexType
     * @param documentId
     * @param map
     * @return
     * @throws Exception
     */
    public boolean documentCreate(String index, String indexType,
                                  String documentId, Map<String, Object> map) throws Exception {
        IndexRequest request = new IndexRequest(index, indexType, documentId);

        request.source(map);
        IndexResponse indexResponse = client.index(request);

        if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
                || indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
            return true;
        }
        ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
        if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
            return true;
        }
        if (shardInfo.getFailed() > 0) {
            for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
                    .getFailures()) {
                throw new Exception(failure.reason());
            }
        }
        return false;
    }

    /**
     * 创建索引
     *
     * @param index
     * @param indexType
     * @param josonStr
     * @return
     * @throws Exception
     */
    public String documentCreate(String index, String indexType, String josonStr)
            throws Exception {
        IndexRequest request = new IndexRequest(index, indexType);

        request.source(josonStr, XContentType.JSON);
        IndexResponse indexResponse = client.index(request);

        String id = indexResponse.getId();
        if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
                || indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
            return id;
        }
        ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
        if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
            return id;
        }
        if (shardInfo.getFailed() > 0) {
            for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
                    .getFailures()) {
                throw new Exception(failure.reason());
            }
        }
        return null;
    }

    /**
     * 创建索引
     *
     * @param index
     * @param indexType
     * @param map
     * @return
     * @throws Exception
     */
    public String documentCreate(String index, String indexType,
                                 Map<String, Object> map) throws Exception {
        IndexRequest request = new IndexRequest(index, indexType);

        request.source(map);
        IndexResponse indexResponse = client.index(request);

        String id = indexResponse.getId();
        if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
                || indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
            return id;
        }
        ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
        if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
            return id;
        }
        if (shardInfo.getFailed() > 0) {
            for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
                    .getFailures()) {
                throw new Exception(failure.reason());
            }
        }
        return null;
    }

    public boolean documentDelete(String index, String indexType,
                                  String documentId) throws Exception {
        DeleteRequest request = new DeleteRequest(index, indexType, documentId);
        DeleteResponse deleteResponse = client.delete(request);
        if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
            return true;
        }
        ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
        if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
            return true;
        }
        if (shardInfo.getFailed() > 0) {
            for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
                    .getFailures()) {
                throw new Exception(failure.reason());
            }
        }
        return false;
    }
    
    public Map<String, Object> getDocument(String index, String indexType,String documentId) {
        Map<String, Object> sourceAsMap = null;
        try {
            GetRequest getRequest = new GetRequest(index, //索引
                    indexType, //类型
                    documentId);//文档ID
            GetResponse getResponse1 = client.get(getRequest);
            sourceAsMap = getResponse1.getSourceAsMap();
        } catch (Exception e) {
            // TODO: handle exception
        }
        return sourceAsMap;
    }

}

 

使用

 @RequestMapping("addIndex.do")
    public String createIndex() throws Exception {

        ESHighLevelRestUtil util = new ESHighLevelRestUtil();
        System.out.println( util.indexExists("indextest001") );

        Map<String, Object> map = new HashMap<String,Object>();
        map.put("name", new HashMap<String, Object>() {
            {
                put("type", "text");
            }
        });
        map.put("age", new HashMap<String, Object>() {
            {
                put("type", "double");
            }
        });
        map.put("sex", new HashMap<String, Object>() {
            {
                put("type", "double");
            }
        });
        map.put("address", new HashMap<String, Object>() {
            {
                put("type", "text");
            }
        });

        // 创建主题
        util.indexCreate("indextest005", "sx", map);

        //创建文档1
        System.out.println(util.documentCreate("indextest005", "sx",
                new HashMap<String,Object>() {
                    {
                        put("name", "名称1");
                        put("age", 18);
                        put("sex", 10);
                        put("address", "地址1");
                    }
                }));

        //创建更新文档2
        System.out.println(util.documentCreate("indextest005", "sx", "1",
                new HashMap<String,Object>() {
                    {
                        put("name", "名称2");
                        put("age", 18);
                        put("sex", 10);
                        put("address", "地址2");
                    }
                }));
        return "SUCCESS!!!";
    }
    
    @RequestMapping("/getIndex.do")
    public String getIndex() {
        ESHighLevelRestUtil util = new ESHighLevelRestUtil();
        Map<String, Object> document = util.getDocument("indextest005", "sx", "1");
        System.out.println(document);
        return "getIndex";
    }

 

https://blog.csdn.net/A_Story_Donkey/article/details/79667670

1.maven的pom中添加:

 
  1. <dependency>

  2. <groupId>org.elasticsearch.client</groupId>

  3. <artifactId>elasticsearch-rest-high-level-client</artifactId>

  4. <version>6.2.0</version>

  5. </dependency>

 

2.创建elastaicsearch的配置class:

 

 
  1. import org.apache.http.HttpHost;

  2. import org.apache.http.client.config.RequestConfig;

  3. import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;

  4. import org.elasticsearch.client.RestClient;

  5. import org.elasticsearch.client.RestClientBuilder;

  6. import org.elasticsearch.client.RestHighLevelClient;

  7.  
  8. // Java客户端生成工厂

  9. public class RestClientFactory{

  10. private static final String HOST = "192.168.3.59";

  11. private static final int PORT = 9200;

  12. private static final String SCHEMA = "http";

  13. private static final int CONNECT_TIME_OUT = 1000;

  14. private static final int SOCKET_TIME_OUT = 30000;

  15. private static final int CONNECTION_REQUEST_TIME_OUT = 500;

  16.  
  17. private static final int MAX_CONNECT_NUM = 100;

  18. private static final int MAX_CONNECT_PER_ROUTE = 100;

  19.  
  20. private static HttpHost HTTP_HOST = new HttpHost(HOST,PORT,SCHEMA);

  21. private static boolean uniqueConnectTimeConfig = false;

  22. private static boolean uniqueConnectNumConfig = true;

  23. private static RestClientBuilder builder;

  24. private static RestClient restClient;

  25. private static RestHighLevelClient restHighLevelClient;

  26.  
  27. static {

  28. init();

  29. }

  30.  
  31. public static void init(){

  32. builder = RestClient.builder(HTTP_HOST);

  33. if(uniqueConnectTimeConfig){

  34. setConnectTimeOutConfig();

  35. }

  36. if(uniqueConnectNumConfig){

  37. setMutiConnectConfig();

  38. }

  39. restClient = builder.build();

  40. restHighLevelClient = new RestHighLevelClient(builder);

  41. }

  42.  
  43. // 主要关于异步httpclient的连接延时配置

  44. public static void setConnectTimeOutConfig(){

  45. builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {

  46. @Override

  47. public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {

  48. builder.setConnectTimeout(CONNECT_TIME_OUT);

  49. builder.setSocketTimeout(SOCKET_TIME_OUT);

  50. builder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT);

  51. return builder;

  52. }

  53. });

  54. /*

  55. builder.setRequestConfigCallback(requestConfigBuilder -> {

  56. requestConfigBuilder.setConnectTimeout(CONNECT_TIME_OUT);

  57. requestConfigBuilder.setSocketTimeout(SOCKET_TIME_OUT);

  58. requestConfigBuilder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIME_OUT);

  59. return requestConfigBuilder;

  60. });

  61. */

  62. }

  63. /**

  64. * 主要关于异步httpclient的连接数配置

  65. */

  66. public static void setMutiConnectConfig(){

  67. builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {

  68. @Override

  69. public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {

  70. httpAsyncClientBuilder.setMaxConnTotal(MAX_CONNECT_NUM);

  71. httpAsyncClientBuilder.setMaxConnPerRoute(MAX_CONNECT_PER_ROUTE);

  72. return httpAsyncClientBuilder;

  73. }

  74. });

  75. /*

  76. builder.setHttpClientConfigCallback(httpClientBuilder -> {

  77. httpClientBuilder.setMaxConnTotal(MAX_CONNECT_NUM);

  78. httpClientBuilder.setMaxConnPerRoute(MAX_CONNECT_PER_ROUTE);

  79. return httpClientBuilder;

  80. });

  81. */

  82. }

  83.  
  84.  
  85. public static RestClient getClient(){

  86. return restClient;

  87. }

  88.  
  89. public static RestHighLevelClient getHighLevelClient(){

  90. if(restHighLevelClient==null){

  91. init();

  92. }

  93. return restHighLevelClient;

  94. }

  95.  
  96. public static void close() {

  97. if (restHighLevelClient != null) {

  98. try {

  99. restHighLevelClient.close();

  100. } catch (Exception e) {

  101. e.printStackTrace();

  102. }

  103. }

  104. }

  105.  
  106.  
  107.  
  108. }

 

 

3.配置实际的demo:

 

 
  1. import com.alibaba.fastjson.JSON;

  2. import com.alibaba.fastjson.JSONObject;

  3.  
  4. import org.elasticsearch.action.ActionListener;

  5. import org.elasticsearch.action.index.IndexRequest;

  6. import org.elasticsearch.action.index.IndexResponse;

  7. import org.elasticsearch.action.search.SearchRequest;

  8. import org.elasticsearch.action.search.SearchResponse;

  9. import org.elasticsearch.client.RestHighLevelClient;

  10. import org.elasticsearch.common.unit.TimeValue;

  11. import org.elasticsearch.common.xcontent.XContentType;

  12. import org.elasticsearch.index.query.*;

  13. import org.elasticsearch.search.SearchHit;

  14. import org.elasticsearch.search.SearchHits;

  15. import org.elasticsearch.search.builder.SearchSourceBuilder;

  16. import org.elasticsearch.search.sort.FieldSortBuilder;

  17. import org.elasticsearch.search.sort.SortBuilders;

  18. import org.elasticsearch.search.sort.SortOrder;

  19.  
  20. import java.io.IOException;

  21. import java.util.Map;

  22. import java.util.UUID;

  23. import java.util.concurrent.TimeUnit;

  24.  
  25. /**

  26. * ClassName: EsIndexDemo

  27. * @Description: TODO

  28. * @author pengbin

  29. * @date 2018/2/26 11:29

  30. */

  31. public class EsIndexDemo {

  32.  
  33. /**

  34. * 同步获取操作结果

  35. */

  36. public static IndexResponse postRequest(String index, String type, String id, String jsonSource)

  37. throws Exception {

  38. // 构建请求

  39. IndexRequest request = new IndexRequest(index, type, id);

  40. // 将保存数据以JSON格式关联到请求

  41. request.source(jsonSource, XContentType.JSON);

  42. // Java客户端发起保存数据请求

  43. IndexResponse response = RestClientFactory.getHighLevelClient().index(request);

  44. // 等待结果

  45. System.out.println(response);

  46. return response;

  47. }

  48. /**

  49. * @param keyword1 关键字1

  50. * @param keyword2 关键字2

  51. * @param startDate 起始时间

  52. * @param endDate 终止时间

  53. *

  54. **/

  55. public static SearchResponse pageQueryRequest(String keyword1, String keyword2, String startDate, String endDate,

  56. int start, int size){

  57. RestHighLevelClient client = RestClientFactory.getHighLevelClient();

  58.  
  59. // 这个sourcebuilder就类似于查询语句中最外层的部分。包括查询分页的起始,

  60. // 查询语句的核心,查询结果的排序,查询结果截取部分返回等一系列配置

  61. SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

  62. // 结果开始处

  63. sourceBuilder.from(start);

  64. // 查询结果终止处

  65. sourceBuilder.size(size);

  66. // 查询的等待时间

  67. sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

  68. MatchQueryBuilder matchbuilder;

  69. matchbuilder = QueryBuilders.matchQuery("message", keyword1+" "+keyword2);

  70. // 同时满足两个关键字

  71. matchbuilder.operator(Operator.AND);

  72. // 查询在时间区间范围内的结果

  73. RangeQueryBuilder rangbuilder = QueryBuilders.rangeQuery("date");

  74. if(!"".equals(startDate)){

  75. rangbuilder.gte(startDate);

  76. }

  77. if(!"".equals(endDate)){

  78. rangbuilder.lte(endDate);

  79. }

  80. // 等同于bool,将两个查询合并

  81. BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();

  82. boolBuilder.must(matchbuilder);

  83. boolBuilder.must(rangbuilder);

  84. // 排序

  85. FieldSortBuilder fsb = SortBuilders.fieldSort("date");

  86. fsb.order(SortOrder.DESC);

  87. sourceBuilder.sort(fsb);

  88.  
  89. sourceBuilder.query(boolBuilder);

  90. //System.out.println(sourceBuilder);

  91. SearchRequest searchRequest = new SearchRequest("request");

  92. searchRequest.types("doc");

  93. searchRequest.source(sourceBuilder);

  94. SearchResponse response = null;

  95. try {

  96. response = client.search(searchRequest);

  97. SearchHits hits= response.getHits();

  98. int totalRecordNum= (int) hits.getTotalHits();

  99. JSONObject json = new JSONObject();

  100. json.put("date","1995-05-16");

  101. // Gson gson = new GsonBuilder()

  102. // .setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")

  103. // .create();

  104. for (SearchHit searchHit : hits) {

  105. Map<String, Object> source = searchHit.getSourceAsMap();

  106. User user = JSON.parseObject(json.toString(),User.class);

  107. // Object entity =gson.fromJson(gson.toJson(source),User.class);

  108. System.out.println(user);

  109. }

  110.  
  111.  
  112. client.close();

  113. } catch (IOException e) {

  114. // TODO Auto-generated catch block

  115. e.printStackTrace();

  116. }

  117.  
  118. return response;

  119. }

  120.  
  121. public static void main(String[] args) {

  122. String jsonString = "{" + "\"user\":\"xiefg\"," + "\"date\":\"2018-01-12\","

  123. + "\"message\":\"trying out Elasticsearch\"" + "}";

  124. try {

  125. for (int i=0;i<30;i++){

  126. postRequest("request", "doc", UUID.randomUUID()+"", jsonString);

  127. }

  128. RestClientFactory.close();

  129.  
  130. } catch (Exception e) {

  131. // TODO Auto-generated catch block

  132. e.printStackTrace();

  133. }

  134. }

  135. }

 

 

3.创建test:

ESTest
 
  1. package myProject;

  2.  
  3. import org.junit.Test;

  4.  
  5. public class ESTest {

  6.  
  7.  
  8. @Test

  9. public void queryKeyWorld(){

  10. EsIndexDemo.pageQueryRequest("trying","out","2018-01-12","2018-01-12",0,9);

  11. }

  12. }

 

public void getQueryDocument(String index, String indexType) {
        
        Map<String, Object> sourceAsMap = null;
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 结果开始处
//        sourceBuilder.from(0);
        // 查询结果终止处
//        sourceBuilder.size(1);
        //多条件查询
//        MatchPhraseQueryBuilder queryBuilder = QueryBuilders.matchPhraseQuery("title", "站").analyzer("ik_max_word");
//        MatchPhraseQueryBuilder queryBuilder1 = QueryBuilders.matchPhraseQuery("content", "一个").analyzer("ik_max_word");
        
//        MatchQueryBuilder analyzer = QueryBuilders.matchQuery("content", "一").analyzer("ik_max_word");
        MultiMatchQueryBuilder analyzer = QueryBuilders.multiMatchQuery("非洲一个国家", "content","title").analyzer("ik_max_word");
        //sourceBuilder.query(QueryBuilders.matchAllQuery());
        sourceBuilder.query(QueryBuilders.boolQuery()
//                .must(queryBuilder)
                .must(analyzer));
        SearchRequest searchRequest = new SearchRequest(index);
        searchRequest.types(indexType);
        searchRequest.source(sourceBuilder);
        SearchResponse response = null;
        try {
            response = client.search(searchRequest);
            SearchHits hits= response.getHits();
            for (SearchHit searchHit : hits) {
                System.out.println(searchHit);
                sourceAsMap = searchHit.getSourceAsMap();
                System.out.println(sourceAsMap);
            }
        }catch (Exception e) {
            // TODO: handle exception
            System.out.println(e);
        }
    }

 

参考地址:http://blog.csdn.net/u010011737/article/details/79041125

 

elasticsearch elk最全java api 搜索 聚合、嵌套查询(吐血整理)

https://blog.csdn.net/sugesi/article/details/80031151

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值