Elasticsearch简单使用

Elasticsearch简单使用

1.创建索引

public boolean createIndex(String index) {
        //index名必须全小写,否则报错
        org.elasticsearch.client.indices.CreateIndexRequest request = new CreateIndexRequest(index);
        try {
            RestHighLevelClient client = elasticsearchConfig.getRestHighLevelClient();
            CreateIndexResponse indexResponse = client.indices().create(request,ElasticsearchConfig.getCommonOptions());
            if (indexResponse.isAcknowledged()) {
                log.info("创建索引成功");
            } else {
                log.info("创建索引失败");
            }
            return indexResponse.isAcknowledged();
        } catch (IOException e) {
            log.info("创建索引失败");
            e.printStackTrace();
        }
        return false;
    }

2.创建文档数据(可批量)

public void createDocument() {
        RestHighLevelClient client = elasticsearchConfig.getRestHighLevelClient();
        BulkRequest bulkRequest = new BulkRequest();
        Map<String,Object> map = new HashMap<>();
        map.put("NAME","张三");
        map.put("sex","男");
        bulkRequest.add(new IndexRequest("search_operation_data").id(String.valueOf(1)).source(map));
        try {
            client.bulk(bulkRequest, RequestOptions.DEFAULT);
            log.info("新增文档数据成功");
            client.close();
        }catch (Exception e){
            log.info("新增文档数据失败:"+e);
        }
        System.out.println("结束");
    }

3.判断指定的索引名是否存在

 public boolean indexExists(String indexName) {
        GetIndexRequest request = new GetIndexRequest();
        request.indices(indexName);
        try {
            return elasticsearchConfig.getRestHighLevelClient().indices().exists(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

4.检索、分页(查询文档数据)

  public List<Map<String, Object>> searchDocument(String indexName, Map<String, Object> mpParams,Integer moudelType,
                                                      int from, int size, String[] fieldArray, Integer preciseQuery) {
        RestHighLevelClient restHighLevelClient = null;
        SearchRequest searchRequest = new SearchRequest(indexName);
        // 大多数搜索参数添加到searchSourceBuilder
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        List<Map<String, Object>> mapList = new ArrayList<>();
        try {
            restHighLevelClient = elasticsearchConfig.getRestHighLevelClient();
            // 组合字段查询
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            //( BUSINESS_ID = 1 or BUSINESS_ID = 2 ) and NAME = "陈"
            BoolQueryBuilder boolQueryBuilderV1 = QueryBuilders.boolQuery();
            BoolQueryBuilder boolQueryBuilderV2 = QueryBuilders.boolQuery();
            boolQueryBuilderV1.should(QueryBuilders.matchPhraseQuery("BUSINESS_ID", "1"));
            boolQueryBuilderV1.should(QueryBuilders.matchPhraseQuery("BUSINESS_ID", "11"));
            boolQueryBuilderV2.should(QueryBuilders.matchPhraseQuery("NAME", "*"+mpParams.get("NAME")+"*"));
            boolQueryBuilder.must(boolQueryBuilderV1);
            boolQueryBuilder.must(boolQueryBuilderV2);
            searchSourceBuilder.query(boolQueryBuilder);
       
            // 按照Id倒序businessId
            searchSourceBuilder.sort(new FieldSortBuilder("BUSINESS_ID").order(SortOrder.ASC));
            // 分页
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(10);
            // 允许搜索的超时时长
            searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            // 返回结果
            SearchHits searchHitArray = searchResponse.getHits();
            for (SearchHit searchHit : searchHitArray.getHits()) {
                Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                mapList.add(sourceAsMap);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                restHighLevelClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return mapList;
    }

5.更新文档内容

public void updateDocument(String indexName, String id) throws Exception {
        RestHighLevelClient client = elasticsearchConfig.getRestHighLevelClient();
        // 更新部分文档内容
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("age", 25);
        jsonMap.put("email", "email2020");

        // 创建更新文档请求并设置参数
        UpdateRequest updateRequest = new UpdateRequest(indexName, id);
        updateRequest.doc(jsonMap);
        // 主分片执行更新的超时时长
        updateRequest.timeout(TimeValue.timeValueSeconds(1));
        // 刷新策略
        updateRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
        // 重试更新操作多少次
        updateRequest.retryOnConflict(3);

        // 异步执行更新文档的请求
        client.updateAsync(updateRequest, RequestOptions.DEFAULT, new ActionListener<UpdateResponse>() {
            @Override
            public void onResponse(UpdateResponse updateResponse) {
                log.info("更新文档内容成功:"+updateResponse);
            }

            @Override
            public void onFailure(Exception e){
              log.info("更新文档内容失败:"+e.getMessage());
            }
        });
    }

注:RestHighLevelClient 获取

public RestHighLevelClient getRestHighLevelClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        //访问用户名和密码为您创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, pwd));

        // 通过builder创建rest client,配置http client的HttpClientConfigCallback。
        // 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。
        RestClientBuilder builder = RestClient.builder(new HttpHost(address, port))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // RestHighLevelClient实例通过REST low-level client builder进行构造。
        RestHighLevelClient highClient = new RestHighLevelClient(builder);
        return highClient;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值