IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Elasticsearch、ik分词器安装、SpringBoot整合、docker安装ES、Kibana、nginx -> 正文阅读

[系统运维]Elasticsearch、ik分词器安装、SpringBoot整合、docker安装ES、Kibana、nginx

一、简介

? Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

? Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的

接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

REST API:天然的跨平台。

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html

二、Docker 安装 Es和Kibana

  1. 拉取镜像文件

    # 存储和检索数据
    docker pull elasticsearch:7.4.2
    
    # 可视化检索数据
    docker pull kibana:7.4.2
    
  2. 配置挂载数据文件夹

    # 创建配置文件目录
    mkdir -p /mydata/elasticsearch/config
    
    # 创建数据目录
    mkdir -p /mydata/elasticsearch/data
    
    # 将/mydata/elasticsearch/文件夹中文件都可读可写
    chmod -R 777 /mydata/elasticsearch/
    
    # 配置任意机器可以访问 elasticsearch
    echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
    
  3. 启动Elasticsearch

    docker run --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 \
    -e  "discovery.type=single-node" \
    -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
    -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
    -v  /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
    -d elasticsearch:7.4.2 
    
    # -p 9200:9200 -p 9300:9300:向外暴露两个端口,9200用于HTTP REST API请求,9300 ES 在分布式集群状态下 ES 之间的通信端口;
    # -e  "discovery.type=single-node":es 以单节点运行
    # -e ES_JAVA_OPTS="-Xms64m -Xmx512m":设置启动占用内存,不设置可能会占用当前系统所有内存
    # -v:挂载容器中的配置文件、数据文件、插件数据到本机的文件夹;
    # -d elasticsearch:7.6.2:指定要启动的镜像
    
    #访问 IP:9200 看到返回的 json 数据说明启动成功。
    
  4. 启动可视化Kibana

    docker run --name kibana --restart=always \
    -e ELASTICSEARCH_HOSTS=http://192.168.0.11:9200 \
    -p 5601:5601 \
    -d kibana:7.4.2
    
    # -e ELASTICSEARCH_HOSTS=http://192.168.0.11:9200: 这里要设置成自己的虚拟机IP地址
    # http://192.168.0.11:5601/
    

三、安装ik分词器

注意:下载ES对应版本的ik分词器

1. ik分词器下载地址:

https://github.com/medcl/elasticsearch-analysis-ik/releases

2. 解压.ZIP—>移动到Es容器内部 plugins 目录下

3. 授权

chmod -R 777 ik

4. 重启ES

5. 测试分词器

POST _analyze
{
  "analyzer": "ik_smart", 
  "text": "我是中国人"
}

POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "我是中国人"
}

6.自定义词库(这里需安装nginx)

#修改/usr/share/elasticsearch/plugins/ik/config/中的 IKAnalyzer.cfg.xml
vim /mydata/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml

#原来的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

#修改过后的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典-->  
        <!--nginx 发布静态资源,按照请求路径,创建对应的文件夹以及文件,放在 nginx 的 html下-->
        <entry key="remote_ext_dict">http://192.168.1.123/es/fenci.txt</entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

重启ES

四、Docker安装 nginx

  • 随便启动一个 nginx 实例,只是为了复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
  • 将容器内的配置文件拷贝到当前目录
docker container cp nginx:/etc/nginx .
  • 修改文件名称:mv nginx conf 把这个 conf 移动到/mydata/nginx 下
  • 终止原容器:docker stop nginx
  • 执行命令删除原容器:docker rm nginx
  • 创建新的 nginx;执行以下命令
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
  • 给 nginx 的 html 下面放的所有资源可以直接访问
vim index.html
#写测试文字,例:如下所示
<h1>Hello Nginx</h1>

五、检索格式

1、检索信息

GET bank/_search  #检索 bank 下所有信息,包括 type 和 docs
GET bank/_search?q=*&sort=account_number:asc  #请求参数方式检索

响应结果

took - Elasticsearch 执行搜索的时间(毫秒) 
time_out - 告诉我们搜索是否超时 
_shards - 告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片 
hits - 搜索结果 
hits.total - 搜索结果 
hits.hits - 实际的搜索结果数组(默认为前 10 的文档) 
sort - 结果的排序 key(键)(没有则按 score 排序) 
score 和 max_score –相关性得分和最高得分(全文检索用)

2、_cat

GET /_cat/nodes:  #查看所有节点 
GET /_cat/health: #查看 es 健康状况 
GET /_cat/master: #查看主节点 
GET /_cat/indices:#查看所有索引 show databases;

3、样本测试数据

https://gitee.com/xlh_blog/common_content/blob/master/es%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.json

4、插入(导入)测试数据

POST bank/account/_bulk
#测试数据

六、SpringBoot整合

官网:https://www.elastic.co/guide/en/elasticsearch/client/index.html

1、导入依赖


       <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.4.2</version>
            <scope>compile</scope>
        </dependency>

2、编写配置文件

public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        /*builder.addHeader("Authorization", "Bearer " + TOKEN);
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/
        COMMON_OPTIONS = builder.build();
    }

@Bean 
RestHighLevelClient client() { 
  RestClientBuilder builder = RestClient.builder(new HttpHost("192.168.1.123", 9200, "http")); 	   return new RestHighLevelClient(builder); 
}

3、测试

	/**
     * 检索测试
     */
    @Test
    public void searchData() throws IOException {
        //1、创建检索请求
        SearchRequest searchRequest = new SearchRequest();
        //指定索引
        searchRequest.indices("bank");
        //检索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //1.1、构造检索条件
        searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
        System.out.println(searchSourceBuilder.toString());

        searchRequest.source(searchSourceBuilder);

        //2、执行检索
        SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);

        //3、分析结果searchResponse
        System.out.println(searchResponse.toString());
    }


	/**
     * 测试存储数据到es
     * 更新也可以
     */
    @Test
    public void indexData() throws IOException {
        IndexRequest indexRequest = new IndexRequest("users");
        indexRequest.id("1"); //数据id
        //indexRequest.source("username","zhangsan","age",18,"gender","男");
        User user = new User();
        user.setUserName("zhangsan");
        user.setAge(18);
        user.setGender("男");
        String jsonString = JSON.toJSONString(user);
        indexRequest.source(jsonString, XContentType.JSON);//要保存的内容

        //执行操作
        IndexResponse index = client.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS);
        System.out.println(index);
    }

    @Data
    class User{
        private String userName;
        private String gender;
        private Integer age;
    }
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:40:48  更:2021-11-29 16:42:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:37:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码