• elasticsearch的安装及使用


    第一步:安装jdk
    第二步:安装elasticsearch-7.6.1-linux-x86_64.tar.gz,上传到一个路径下

    在这里插入图片描述

    第三步:用户root下创建es的用户,用root用户启动或者安装软件会有问题

    在这里插入图片描述
    修改用户、用户组
    在这里插入图片描述

    第四步:修改es的配置文件,在下面图中的路径下

    在这里插入图片描述
    代码如下;

    cluster.name: elasticsearch
    node.name: node-1 
    network.host: 0.0.0.0 
    http.port: 9200
    cluster.initial_master_nodes: ["node-1"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    第五步:修改这个路径下的配置文件
    #修改这个文件,在文件末尾中增加下面的内容
    vim /etc/security/limits.conf
    #每个进程可以打开的文件数的限制
    es soft nofile 65536
    es hard nofile 65536
    
    • 1
    • 2
    • 3
    • 4
    • 5
    第六步:修改这个路径下的配置文件
    vim /etc/security/limits.d/20-nproc.conf
    #修改这个文件,在文件末尾中增加下面的内容
    #每个进程可以打开的文件数的限制
    es soft nofile 65536
    es hard nofile 65536
    #操作系统级别对每个用户创建的进程数的限制
    * hard nproc 4096
    #注:*代表Linux所有用户名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    第七步:修改这个路径下的配置文件
    vim /etc/sysctl.conf
    #在文件中增加下面的内容
    #一个进程可以拥有的VMA(虚拟内存区域)的数量,默认值为65536
    vm.max_map_count=655360
    
    • 1
    • 2
    • 3
    • 4

    修改完此配置文件以后,执行sysctl -p (重新加载)
    sysctl -p

    第八步:启动,在bin目录下执行

    报错原因,是以root用户启动的
    在这里插入图片描述
    然后换到es用户进行启动,报错如下;
    在这里插入图片描述
    原来是这样,以root用户启动时,会生成一些文件信息,这些文件信息的用户、用户组还是root的
    解决方案:在执行一下这个命令即可

    chown -R es:es /usr/local/soft/es/es-cluster/
    
    • 1

    然后重启启动,正常启动了

    第九步:克隆这台机器,克隆两台机器,然后修改ifcfg-ens33的这个配置文件,编辑不同的IP地址,这样做的好处是,不用重新安装jdk和es,也不用重新建用户了
    第十步:分别修改elasticsearch.yml文件,内容添加如下,es集群搭建都可以了
    cluster.name: cluster-es
    #节点名称,每个节点的名称不能重复
    node.name: node-1
    #IP地址,每个节点的地址不能重复
    network.host: 192.168.15.100
    node.master: true
    node.data: true
    http.port: 9200
    transport.port: 9300
    #head 插件需要这里打开这两个配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.max_content_length: 200mb
    #es7之后新增的配置,初始化一个新的集群时需要此配置来选举master
    cluster.initial_master_nodes: ["node-1"]
    #es7之后新增的配置,节点发现
    discovery.seed_hosts: ["192.168.15.100:9300", "192.168.15.101:9300","192.168.15.102:9300"]
    gateway.recover_after_nodes: 2
    network.tcp.keep_alive: true
    network.tcp.no_delay: true
    transport.tcp.compress: true
    #集群内同时启动的数据任务个数,默认是2个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认是4个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的人数,默认是4个
    cluster.routing.allocation.node_initial_primaries_recoveries: 16
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    遇到的问题,在浏览器中输入 IP地址:9200,访问不到
    解决方案:关闭防火墙

    systemctl stop firewalld.service
    
    • 1

    查看防火墙的状态的命令

    systemctl status firewalld.service
    
    • 1

    集群可以正常启动了,但是用postman请求时,报错如下;
    在这里插入图片描述
    解决的方法,在这个路径下,将data目录下的都删除,然后重启即可
    在这里插入图片描述

    
    var foo = 'bar';
    
    • 1
    • 2
    008-创建索引

    对比关系型数据库,创建索引就相当于创建数据库

    在这里插入图片描述
    当我们再次执行这个put命令时,提示如下;不能重复创建
    在这里插入图片描述

    009-查看索引

    查看索引用GET请求,可以看到这个索引的相关信息
    在这里插入图片描述
    查看所有的索引

    http://192.168.15.100:9200/_cat/indices?v
    
    • 1

    在这里插入图片描述

    删除索引
    删除索引用DELETE请求方式
    在这里插入图片描述
    删除完成我们再去查看

    在这里插入图片描述

    010-创建文档

    创建文档就相当于向数据库中添加数据
    直接执行这个命令报错

    http://192.168.15.100:9200/shopping/_doc
    
    • 1

    在这里插入图片描述
    需要在body中添加数据,以JSON格式来及逆行存储

    {
        "title":"小米手机",
        "category":"小米",
        "images":"https:xiaomi.com",
        "prices":"2999"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    我们再用PUT请求再尝试一次
    在这里插入图片描述
    自定义存储的id,这个不推荐把
    在这里插入图片描述

    011-主键查询、全量查询

    根据id进行查询
    在这里插入图片描述
    全量查询
    在这里插入图片描述

    012-全量修改、局部修改

    完全覆盖(幂等性)
    在这里插入图片描述

    局部修改
    在这里插入图片描述
    再去查看
    在这里插入图片描述

    013-条件查询、分页查询、查询排序

    在请求地址中拼接参数,不可取,因为中文的话可能存在问题

    http://192.168.15.100:9200/shopping/_search?q=category:小米
    
    • 1

    在这里插入图片描述
    在body中加上下面的参数,推荐这种方式

    {
    
        "query":{
            "match":{
                "category":"小米"
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    全量查询,只需要将match改成match_all即可
    在这里插入图片描述
    分页查询

    {
    
        "query":{
            "match_all":{
                
            }       
        },
        "from":0, 起始的位置
            "size":1  每页的数据条数
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    条件筛选,拼接上source,在source中加上要筛选的字段即可
    在这里插入图片描述

    {
        "query":{
            "match_all":{           
            }       
        },
        "from":0,
        "size":1,
        "_source":[
            "title"
        ],
        "sort":{
            "prices":{
                "order":"desc"
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    014-多条件查询、范围查询
    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "category":"小米"
                        }
                    }
                ]
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    拼接多个条件时,match多写几个就可以了

    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "category":"小米"
                        }
                    },
                    {
                       "match":{
                            "prices":"2999"
                        } 
                    }
                ]
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    或者的方式,类似于or,请求体中加上should关键字即可

    {
        "query":{
            "bool":{
                "should":[
                    {
                        "match":{
                            "category":"小米"
                        }
                    },
                    {
                       "match":{
                            "category":"华为"
                        } 
                    }
                ]
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    范围查询,加上filter关键字

    {
        "query":{
            "bool":{
                "should":[
                    {
                        "match":{
                            "category":"小米"
                        }
                    },
                    {
                       "match":{
                            "category":"华为"
                        } 
                    }
                ],
                "filter":{
                    "range":{
                        "prices":{
                            "gt":5000
                        }
                    }
                }
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    015-全文检索、完全匹配、高亮查询

    只用一个“米”字也能查询出来,分词器的作用
    在这里插入图片描述
    在这里插入图片描述
    精确查询
    在这里插入图片描述
    高亮显示

    {
        "query":{
            "match_phrase":{
                "category":"小米"
            }
        },
        "highlight":{
            "fields":{
                "category":{}
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    分组聚合

    {
        "aggs":{
            "price_group":{ //名称可以随意起
                "terms":{
                    "field":"category"
                }
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    017-映射关系

    没有索引的,不支持查询(注意)

    {
        "properties":{
            "name":{
                "type":"text",  //可以分词
                "index":true    //走索引
            },
            "sex":{
                "type":"keyword",  //不可以分词
                "index":true
            },
            "phone":{
                "type":"keyword",
                "index":false  //不走索引
            }
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    018-入门-JavaAPI-环境准备

    首先,先在pom文件中引入下面的依赖,我的ES的版本是7.6.1

    <dependency>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                    <version>7.6.1</version>
                </dependency>
                <!-- elasticsearch 的客户端 -->
                <dependency>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                    <version>7.6.1</version>
                </dependency>
                <!-- elasticsearch 依赖 2.x 的 log4j -->
                <dependency>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                    <version>2.8.2</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-core</artifactId>
                    <version>2.8.2</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>2.9.9</version>
                </dependency>
                <!-- junit 单元测试 -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    下面是创建客户端的样例代码

    package com.ruoyi.web.controller.es;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    
    import java.io.IOException;
    
    /**
     * 以客户端的形式访问es
     */
    public class EsTest_Client {
    
        public static void main(String[] args) throws IOException {
    
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
    
    
            //关闭ES的客户端
            es_client.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    019-入门-JavaAPI-索引-创建
    //创建索引
        public static void create_index() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //创建索引
            CreateIndexRequest request = new CreateIndexRequest("test_xige");
            //
            CreateIndexResponse response = es_client.indices().create(request, RequestOptions.DEFAULT);
            //相应状态
            boolean acknowledged = response.isAcknowledged();
            //打印一下相应状态
            System.out.println("打印相应状态" + acknowledged) ;
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    控制台打印成TRUE,说明我们创建索引成功了,然后用postman或者kibana去查看都可以了
    在这里插入图片描述

    020-入门-JavaAPI-索引-查询&删除
    public static void query_index() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //查看索引
            GetIndexRequest request = new GetIndexRequest("test_xige");
            //
            GetIndexResponse response = es_client.indices().get(request, RequestOptions.DEFAULT);
            //相应状态
            Map<String, List<AliasMetaData>> aliases = response.getAliases();
            Map<String, MappingMetaData> mappings = response.getMappings();
            Map<String, Settings> settings = response.getSettings();
    
            //打印一下相应状态
            System.out.println("打印索引的--别名:---" + aliases) ;
            System.out.println("打印索引的--映射:---" + mappings) ;
            System.out.println("打印索引的--设置:---" + settings) ;
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    删除索引

    //删除索引
        public static void delete_index() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //查看索引
            DeleteIndexRequest request = new DeleteIndexRequest("test_xige");
            //
            AcknowledgedResponse response = es_client.indices().delete(request, RequestOptions.DEFAULT);
            //相应状态
            //打印一下相应状态
            System.out.println("删除状态:---" + response) ;
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    021-入门-JavaAPI-文档-新增&修改
    //向索引中添加数据
        public static void insert_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            IndexRequest resuest = new IndexRequest();
            resuest.index("xige").id("100001");
    
            XiGe xiGe = new XiGe();
            xiGe.setName("吴占喜");
            xiGe.setAge("30");
            xiGe.setSex("男");
    
            //向ES中添加数据,格式必须是JSON格式的
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(xiGe);
            //
            resuest.source(json, XContentType.JSON);
            //
            IndexResponse response = es_client.index(resuest, RequestOptions.DEFAULT);
            //
            String id = response.getId();
            String index = response.getIndex();
            DocWriteResponse.Result result = response.getResult();
            System.out.println("ID:" + id);
            System.out.println("index:" + index);
            System.out.println("result:" + result);
    
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    看控制台的打印结果
    在这里插入图片描述
    然后去kibana中去查看,已经添加成功了
    在这里插入图片描述

    022-入门-JavaAPI-文档-查询&删除
    //查询
        public static void query_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            GetRequest request = new GetRequest();
            //
            request.index("xige").id("100001");
            //
            GetResponse response = es_client.get(request, RequestOptions.DEFAULT);
            //
            String index = response.getIndex();
            String sourceAsString = response.getSourceAsString();
            //
            System.out.println("索引:"+index);
            System.out.println("所有的字段:" + sourceAsString);
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    查看控制台的打印
    在这里插入图片描述

    023-入门-JavaAPI-文档-批量新增&批量删除
    //批量新增
        public static void batch_insert_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            BulkRequest request = new BulkRequest();
            //
            request.add(new IndexRequest().index("xige").id("1001").source(XContentType.JSON,"name","张三"));
            request.add(new IndexRequest().index("xige").id("1002").source(XContentType.JSON,"name","李四"));
            request.add(new IndexRequest().index("xige").id("1003").source(XContentType.JSON,"name","王五"));
            //
            BulkResponse reponse = es_client.bulk(request, RequestOptions.DEFAULT);
            //
            System.out.println(reponse.getItems());
            System.out.println(reponse.getTook());
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    控制台打印
    在这里插入图片描述
    感觉也不是太方便,期待后面有更好的批量新增的方法吧
    去页面上查看,已经成功添加进来了
    在这里插入图片描述

    024-入门-JavaAPI-文档-高级查询&全量查询
    //高级查询、全量查询
        public static void query_all_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            SearchRequest request = new SearchRequest();
            //
            request.indices("xige");
            //
            SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            //
            request.source(query);
            //
            SearchResponse response = es_client.search(request, RequestOptions.DEFAULT);
    
            //
            SearchHits hits = response.getHits();
    
            System.out.println("命中的条数" + hits.getTotalHits());
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    025-入门-JavaAPI-文档-高级查询&分页查询&条件查询&字段查询

    条件查询

    //高级查询、条件查询
        public static void query_term_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            SearchRequest request = new SearchRequest();
            //
            request.indices("xige");
            //
            SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.termQuery("name","王"));
            //
            request.source(query);
            //
            SearchResponse response = es_client.search(request, RequestOptions.DEFAULT);
    
            //
            SearchHits hits = response.getHits();
    
            System.out.println("命中的条数" + hits.getTotalHits());
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    此时发现了一个有意思的现象哈,我用王五查询是查询不到的,可能跟汉字的分词有关系,用王或者五都能查询出来
    分页查询

     public static void query_fenye_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            SearchRequest request = new SearchRequest();
            //
            request.indices("xige");
            //
            SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            //设置分页的起始位置和每页要展示的条数
            query.from(0);
            query.size(2);
            //
            request.source(query);
            //
            SearchResponse response = es_client.search(request, RequestOptions.DEFAULT);
    
            //
            SearchHits hits = response.getHits();
    
            System.out.println("命中的条数" + hits.getTotalHits());
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    排序

    public static void query_fenye_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            SearchRequest request = new SearchRequest();
            //
            request.indices("xige");
            //
            SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            //设置分页的起始位置和每页要展示的条数
           
            query.sort("name", SortOrder.ASC);
            //
            request.source(query);
            //
            SearchResponse response = es_client.search(request, RequestOptions.DEFAULT);
    
            //
            SearchHits hits = response.getHits();
    
            System.out.println("命中的条数" + hits.getTotalHits());
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    026-入门-JavaAPI-文档-高级查询&组合查询&范围查询
     //高级查询、条件查询
        public static void query_combine_data() throws IOException {
            //创建es的客户端
            RestHighLevelClient es_client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("172.16.94.7",9200))
            );
            //
            SearchRequest request = new SearchRequest();
            //
            request.indices("xige");
            //
            SearchSourceBuilder build = new SearchSourceBuilder();
            //
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            //
            boolQueryBuilder.must(QueryBuilders.matchQuery("name","王"));
            //
            build.query(boolQueryBuilder);
            //
            request.source(build);
            SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
            //设置分页的起始位置和每页要展示的条数
    
    
            //
            request.source(query);
            //
            SearchResponse response = es_client.search(request, RequestOptions.DEFAULT);
    
            //
            SearchHits hits = response.getHits();
    
            System.out.println("命中的条数" + hits.getTotalHits());
    
            //关闭ES的客户端
            es_client.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    安装ES遇到的问题

    1.报错java路径找不到,注意:这里面安装es和jdk不要在/root路径下

    2.报错max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
    我发现我已经配置了这个限制了
    在这里插入图片描述
    然后我执行下面的命令,依然报错如上
    ulimit -Hn: 是max number of open file descriptors的hard限制
    ulimit -Sn: 是max number of open file descriptors的soft限制

    最后找了相关文档,发现,改完需要重新登录才能生效,或者切换用户,至此,问题解决喽

    启动logstash报错如下;

    2022-10-17T15:21:48,805][FATAL][logstash.runner          ] An unexpected error occurred! {:error=>#<ArgumentError: Path "/usr/local/soft/es/logstash/logstash-7.6.1/data/queue" must be a writable directory. It is not writable.>, :backtrace=>["/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/settings.rb:489:in `validate'", "/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/settings.rb:271:in `validate_value'", "/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/settings.rb:182:in `block in validate_all'", "org/jruby/RubyHash.java:1428:in `each'", "/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/settings.rb:181:in `validate_all'", "/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/runner.rb:284:in `execute'", "/usr/local/soft/es/logstash/logstash-7.6.1/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/local/soft/es/logstash/logstash-7.6.1/logstash-core/lib/logstash/runner.rb:242:in `run'", "/usr/local/soft/es/logstash/logstash-7.6.1/vendor/bundle/jruby/2.5.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/local/soft/es/logstash/logstash-7.6.1/lib/bootstrap/environment.rb:73:in `
    '"]} [2022-10-17T15:21:48,898][ERROR][org.logstash.Logstash ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
    • 1
    • 2

    报错原因是/usr/local/soft/es/logstash/logstash-7.6.1/data/queue下的用户用户组是root了,手动的改一下权限就解决了

    解决方案:进入到/usr/local/soft/es/ 这个目录下,执行命令
    chown -R es:es

    kibana的界面显示如下;在日志目录下没发现问题,/var/log/message
    在这里插入图片描述
    解决方案:重启kibana,现在还没有找到报错的合理的解决方法

  • 相关阅读:
    对中定位夹具运动分析及仿真
    ECCV 2022 超分辨率(super-resolution)方向上接收论文总结(持续更新)
    小公司全栈是归宿吗?
    Windows OpenGL ES 图像饱和度调节
    详解二叉搜索树【C++实现】
    unity sdk -Firebase 统计接入
    Java底层面试知识学习
    Vue3 Setup语法糖汇总
    mini-Imagenet处理
    PHP代码审计——文件操作漏洞
  • 原文地址:https://blog.csdn.net/qq_38220334/article/details/126911823