【ES】---ES的基本操作

这篇具有很好参考价值的文章主要介绍了【ES】---ES的基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

ES有4种客户端,分别是:Jest client、Rest client、Transport client、Node client。
ES支持两种协议
HTTP协议,支持的客户端有Jest client和Rest client
Native Elasticsearch binary协议,也就是Transport client【7.0弃用】和Node client【2.3弃用】
Jest client非官方支持,在ES5.0之前官方提供的客户端只有Transport client、Node client。在5.0之后官方发布Rest client【推荐使用】。

二、Jest client和Rest client使用

2.1、Rest client方式

sptingboot2.0版本引用jar包

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.15.0</version>
        </dependency>
        <!-- elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>com.hankcs</groupId>
            <artifactId>hanlp</artifactId>
            <version>portable-1.7.5</version>
        </dependency>

pom文件配置

#es配置
es.enable=true
es.hostUrl=**
es.port=9200
es.protocol=http
es.connectTimeOut=1000
es.socketTimeOut=30000
es.connectionRequestTimeOut=500
es.maxConnectNum=100
es.maxConnectPerRoute=100
es.username=***
es.password=***

RestHighLevelClient的config如下:

@Configuration
public class ElasticClient {
   
    @Value("${es.hostUrl}")
    private String hostUrl;
    @Value("${es.port}")
    private int port;
    @Value("${es.protocol}")
    private String protocol;
    @Value("${es.connectTimeOut}")
    private int connectTimeOut;
    @Value("${es.socketTimeOut}")
    private int socketTimeOut;
    @Value("${es.connectionRequestTimeOut}")
    private int connectionRequestTimeOut;
    @Value("${es.maxConnectNum}")
    private int maxConnectNum;
    @Value("${es.maxConnectPerRoute}")
    private int maxConnectPerRoute;
    @Value("${es.username}")
    private String username;
    @Value("${es.password}")
    private String password;

    @Bean(destroyMethod = "close")
    public RestHighLevelClient restHighLevelClient() {
   
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(hostUrl, port, protocol));
        restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
   
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
   
                httpClientBuilder.setMaxConnTotal(maxConnectNum);
                httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
                httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                return httpClientBuilder;
            }
        });
        //请求配置
        restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
   
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
   
                requestConfigBuilder.setConnectTimeout(connectTimeOut);
                requestConfigBuilder.setSocketTimeout(socketTimeOut);
                requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
                return requestConfigBuilder;
            }
        });
        return new RestHighLevelClient(restClientBuilder);
    }
}

三、Rest client方式

3.1、基本操作

@Data
public abstract class BaseEsDo implements Serializable {
   
    /**
     * ES的INDEX
     */
    @JSONField(name = "index")
    private String index;
    /**
     * ES唯一值ID
     */
    @JSONField(name = "id")
    private String id;
    /**
     * 创建时间
     */
    @JSONField(name = "create_time", format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 修改时间
     */
    @JSONField(name = "update_time", format = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 文档状态
     */
    @JSONField(name = "doc_state")
    private Boolean docState;
    /**
     * 文档版本
     */
    @JSONField(name = "doc_version")
    private Integer docVersion;
    /**
     * 文档备注
     */
    @JSONField(name = "doc_remarks")
    private String docRemarks;
    /**
     * 文档查看数量
     */
    @JSONField(name = "doc_view_number")
    private int docViewNumber;
    /**
     * 文档删除状态,默认true
     */
    @JSONField(name = "doc_delete")
    private boolean docDelete = false;
}

AbstractElasticRepository类是封装的常见ES操作文章来源地址https://www.toymoban.com/news/detail-482801.html

@Repository
@Slf4j
public abstract class AbstractElasticRepository<T extends BaseEsDo> {
   
    @Autowired
    protected RestHighLevelClient client;
    @Autowired
    private JestClient jestClient; //后续研究


    /**
     * 全量匹配查询 【默认返回10条记录】
     * @param index
     * @return
     */
    public <T extends BaseEsDo> List<T> queryMatchAll(String index, Class<T> clazz) throws IOException{
   
        //1.创建 SearchRequest搜索请求
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(index);//指定要查询的索引
        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(matchAllQueryBuilder);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);
        //4.执行查询
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("花费的时长:" + searchResponse.getTook());
        SearchHits hits = searchResponse.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println("符合条件的总文档数量:" + hits.getTotalHits().value);
        List<T> list = Arrays.stream(hits.getHits())
                .map(searchHit ->JSON.parseObject(JSON.toJSONString(searchHit.getSourceAsMap()), clazz))
                .collect(Collectors.toList());
        return list;
    }

    /**
     * 分页查询、倒序或降序、指定需要返回或者排除的字段
     * sortMap:不能传多个,只能传一个排序
     * @throws IOException
     */
    public <T extends BaseEsDo> List<T> pageQuery(String index, int from, int size, Map<

到了这里,关于【ES】---ES的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java用es客户端创建索引

    先用java创建esClient 创建es索引模板 新建索引 批量插入数据 1.先批量生成数据 2批量导入方法

    2024年02月11日
    浏览(54)
  • 【ES实战】ES创建Transports客户端时间过长分析

    2023年10月19日 在创建ES Transport客户端的时,当出现以下场景时,影响连接速度。 使用ES Transport 客户端创建与集群的链接。 连接地址里面有不存在的IP 在增加ES节点时,采用逐个增加的方式 整个建立链接的过程会非常耗时。 采用jar依赖如下 创建连接代码如下 输出结果 是否可

    2024年02月07日
    浏览(49)
  • ES查询客户端初始化(RestHighLevelClient)

    另外,如果说把es当成一个数据库使用,可以看下开源项目easy-es,操作更方便。文档地址:快速开始 | Easy-Es

    2024年02月11日
    浏览(53)
  • es最大相似度检索(原生与java客户端)

    原生rest: 对“不好”进行分词, \\\"operator\\\": \\\"and\\\" 意思是同时满足。 结果: java RestHighLevelClient

    2024年02月11日
    浏览(50)
  • Http客户端OkHttp的基本使用

    OkHttp是一个强大的开源HTTP客户端,它被广泛用于Android和Java应用程序中。OkHttp具有简单易用的API,提供了许多高级功能,如连接池、请求压缩和缓存等。 要使用OkHttp,需要在项目的构建文件中添加以下依赖: 请将 x.x.x 替换为您希望使用的OkHttp版本号。 GET请求 以下是发送G

    2024年02月09日
    浏览(59)
  • Redis - Python 客户端基本使用指南

    参考:python 模块Redis模块,连接Redis数据库 Python 中的 Redis 客户端库允许开发者与 Redis 数据库进行交互。这些库允许在 Python 中连接到 Redis、执行命令以读取或写入数据,并处理 Redis 数据。 以下是一些常见的 Python Redis 客户端库: redis 库:是 Python 中最常用的 Redis 客户端库之

    2024年02月08日
    浏览(45)
  • Git 客户端基本使用及新手常见问题

    Git作为一个版本管理工具,在企业中的应用越来越普遍。作为一个测试工程师,不可避免会需要接触到Git的相关操作,以下整理Git客户端的常见操作,以及应用中新手常碰到的一些问题。 Git下载地址:https://gitforwindows.org/ TortoiseGit,Git客户端,针对32/64操作系统位数及对应的

    2024年02月09日
    浏览(57)
  • ElasticSearch的客户端操作

    ElasticSearch的客户端操作 使用Kibana进行以下实验,进行Restful接口访问 索引库操作,完成对索引的增、删、查操作 “acknowledged” : true, 代表操作成功 “shards_acknowledged” : true, 代表分片操作成功 “index” : “shopping” 表示创建的索引库名称 注意:创建索引库的分片数默认5片,

    2024年02月12日
    浏览(57)
  • java 客户端操作HDFS

    部署包win版本 源码包zip包 lib整合:共121个jar包 $HADOOP_PREFIX/share/hadoop/{common,hdfs,mapreduce,yarn,tools}/{lib,.}*.jar  将windows版本hadoop/bin/hadoop.dll 放到c:/windows/system32下 hadoop的bin和sbin目录放PATH中+HADOOP_HOME+HADOOP_USER_NAME=root 安装插件 配置 重启电脑!!!!!!!加载hadoop.dll 创建java p

    2024年02月10日
    浏览(54)
  • 使用C++操作Redis客户端

    \\\"Who can say where the path will go?\\\"           前面我们花了很大的篇幅,讲解了redis中常见常使用的五种数据结构,以及五种数据结构的操作和redis命令。不过在日常开发中,我们的这些操作都是在redis为我们提供的客户端中的,就像使用mysql一样,很多时候不是在mysql-cli去编写s

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包