java api操作es实战笔记

说明:

 

1 该文档仅供参考,时间有限,日后如有深入理解, 会更新

2 操作es ,了解过的有以下几种, 

2.1 TransportClient客户端 :官方已经明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它,不推荐使用,没使用过

 2.2 spring-boot-starter-data-elasticsearch:与springboot集成的jar包,第一次使用过,但更新比较慢,目前版本才2.1,由于集成springboot 、elasticsearch 所以容易引起与es的冲突(es版本敏感) 也会与springboot冲突,我使用时总是连不上es,果断放弃

2.3 spring-data-elasticsearch: 与上一jar包类似

2.4 RestClient: 基于HTTP的客户端REST Client(推荐使用),官方给出来的REST Client有Java Low Level REST Client和Java Hight Level REST Client两个,前者兼容所有版本的ES,后者是基于前者开发出来的,只暴露了部分API,待完善。这个案例中使用Java Low Level REST Client,有如下的一些特点:(本人使用该api

  • 最小化依赖;
  • 提供跨所有可用节点的负载平衡;
  • 提供节点故障和特定响应代码时的故障转移;
  • 提供失败重连的惩罚机制(是否对一个连接失败的节点尝试重连,取决于它连续失败的次数,尝试重连且失败的次数越多,客户端在再次尝试重连这个节点时等的时间就越长。说那么多,太复杂了,其实给一个场景就是:我找你玩儿,你不答应,我伤自尊了,下次去找你我隔了一个星期再去找你,你又不答应,我又伤自尊了,下次再找你的话,那我就隔两个星期,依次类推);
  • 持久连接;
  • 跟踪请求和响应的日志记录;
  • 可选的集群节点自动发现功能;
     

         引用:https://blog.csdn.net/jacksonary/article/details/82729556

      3 版本   

           elasticsearch:2.3.0  ;

           springboot: 2.1.1.RELEASE 

           elasticsearch-rest-high-level-client: 6.0.0

源码

      pom.xml 依赖


        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.0.0</version>
        </dependency>

 配置类:

import com.ruoyi.common.utils.StringUtils;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.Objects;

@Configuration
public class ElasticsearchRestClient {


    private static final int ADDRESS_LENGTH = 2;
    private static final String HTTP_SCHEME = "http";

    /**
     * 使用冒号隔开ip和端口1
     */
    @Value("${elasticsearch.ip}")
    String[] ipAddress;

    @Bean
    public RestClientBuilder restClientBuilder() {
        HttpHost[] hosts = Arrays.stream(ipAddress)
                .map(this::makeHttpHost)
                .filter(Objects::nonNull)
                .toArray(HttpHost[]::new);
        return RestClient.builder(hosts);
    }


    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) {
        restClientBuilder.setMaxRetryTimeoutMillis(60000);
       //TODO 此处可以进行其它操作
        return new RestHighLevelClient(restClientBuilder);
    }


    private HttpHost makeHttpHost(String s) {
        assert StringUtils.isNotEmpty(s);
        String[] address = s.split(":");
        if (address.length == ADDRESS_LENGTH) {
            String ip = address[0];
            int port = Integer.parseInt(address[1]);
            return new HttpHost(ip, port, HTTP_SCHEME);
        } else {
            return null;
        }
    }
}

配置文件:(注意:此处应该是9200, es 9300是基于TCP的,9200是基于http的) 

elasticsearch:
  ip: 192.168.0.1:9200

代码

@Autowired
RestHighLevelClient highLevelClient; //注入的类

SearchRequest searchRequest = new SearchRequest(index);//index 是es的索引
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//分页
searchSourceBuilder.from((pageNumber - 1) * pageSize));//pageNumber:当前页  pageSize:查询条数
searchSourceBuilder.size(pageSize);
//按时间排序
searchSourceBuilder.sort("time", SortOrder.DESC);//time 是时间字段
//fetchSource 控制显示的字段, 源码:fetchSource(@Nullable String[] includes, @Nullable String[] excludes) ,第二个值代表排除字段
searchSourceBuilder.fetchSource(new String[]{"message", "path"}, new String[]{});//message  path 此处是我要显示的字段
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
//条件查询
if (StringUtils.isNotBlank(abc)) { // abc 参数
	TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("message", abc); //查询message字段等于abc的数据
	boolQueryBuilder.must(termQueryBuilder);
}
//时间查询
if (StringUtils.isNotBlank(starttime) && StringUtils.isNotBlank(endtime)) {//starttime开始时间  endtime 结束时间
	RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("time");//time 是要按时间查询的字段
	rangeQueryBuilder.gte(starttime);
	rangeQueryBuilder.lte(endtime);
	boolQueryBuilder.must(rangeQueryBuilder);
}
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = highLevelClient.search(searchRequest);
long totalHits = searchResponse.getHits().getTotalHits();//totalHits 命中数
SearchHit[] hits = searchResponse.getHits().getHits();//hits 查询出的数据集合
Arrays.stream(hits)
		.forEach(i -> {
			Map<String, Object> sourceAsMap = i.getSourceAsMap();
			//TODO 此处可以操作每条数据
		});

资料:

Elasticsearch 权威指南(中文版)

Elasticsearch 中文API指南 

Java REST Client 官方网址

RestClient+SearchSourceBuilder使用案例

SpringBoot整合Elasticsearch(基于RestClient)

RestHighLevelClient 教程

基于transport 客户端 的API 操作(基于TransportClient)

spring-data-elasticsearch 源码及API文档

springboot elasticsearch 集成注意事项(基于sprinboot-data-elasticsearch)

window下es的head插件安装(亲测有效)

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java API可以用于操作ElasticsearchES)搜索引擎,以下是使用Java API进行ES操作的基本步骤: 1. 导入依赖 在项目中添加Elasticsearch Java API的依赖,例如: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.14.1</version> </dependency> ``` 2. 创建连接 使用Java API连接ES集群,例如: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 3. 创建索引 使用Java API创建索引,例如: ```java CreateIndexRequest request = new CreateIndexRequest("my_index"); client.indices().create(request, RequestOptions.DEFAULT); ``` 4. 添加文档 使用Java API向索引添加文档,例如: ```java IndexRequest request = new IndexRequest("my_index"); request.id("1"); String jsonString = "{" + "\"name\":\"John\"," + "\"age\":30," + "\"city\":\"New York\"" + "}"; request.source(jsonString, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); ``` 5. 搜索文档 使用Java API搜索文档,例如: ```java SearchRequest request = new SearchRequest("my_index"); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.matchQuery("name", "John")); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 6. 关闭连接 使用完Java API后,需要关闭连接,例如: ```java client.close(); ``` 以上就是使用Java API操作ES的基本步骤。具体的操作方式和方法需要根据具体的需求来进行选择。同时,需要注意ES版本和Java API版本的兼容性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值