Elasticsearch、Kibana以及Java操作ES 的快速使用

news2024/11/26 20:25:21

docker 安装elastic search 、 kibana(可视化管理elastic search)

docker pull elasticsearch:7.12.1
docker pull kibana:7.12.1

 

创建docker自定义网络

docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。
一定要配置自定义网络,并将两个容器同时加到网络中,否则下面的http://es:9200会无法访问到es

docker network create es-net

 

启动elastic search、kibana容器

启动elastic search容器

docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

访问 http://192.168.137.139:9200 (注意换成自己服务器的ip地址)
在这里插入图片描述

启动kibana容器

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

访问 http://192.168.137.139:5601 (注意换成自己服务器的ip地址)
在这里插入图片描述
 

给es安装 ik分词器

默认的分词器对中文并不友好,ik分词器可以更好的支持中文分词
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.12.1
(官方有其他的下载方式,可以参考:https://github.com/medcl/elasticsearch-analysis-ik)
在这里插入图片描述

 查看es-plugins的挂载卷所在目录
docker volume inspect es-plugins

得到 /var/lib/docker/volumes/es-plugins/_data

将下载的文件解压缩并传到服务器挂在卷中

scp -r ik myserver:/var/lib/docker/volumes/es-plugins/_data

在这里插入图片描述

重启es服务

docker restart es

ocker logs es | grep ik	# 查看ik分词器是否成功加载

在这里插入图片描述
使用Dev Tools测试
在这里插入图片描述

IK分词器包含两种模式:(根据业务选择)

  • ik_smart:最少切分

  • ik_max_word:最细切分

扩展ik分词器的词典

在这里插入图片描述
奥里给并没有组成一个词

cd /var/lib/docker/volumes/es-plugins/_data/ik/config/

oligei.dic文件

<?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_dict">my_dict.dic</entry>

	<!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
    <entry key="ext_stopwords">my_stopwords.dic</entry>

	<!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->

	<!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

重启es 和 kibana

docker restart es
docker restart kibana

ocker logs es | grep my_ # 查看日志是否加载了配置

在这里插入图片描述
在这里插入图片描述

 


 

es 索引库操作

创建索引库

PUT /user 
{
  "mappings": {
    "properties": {
      "info": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email": {
        "type": "keyword",
        "index": "false"
      },
      "name": {
        "type": "object",
        "properties": {
          "fistName": {
            "type": "keyword"
          },
          "lastName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

删除索引库

DELETE /user

修改索引库

索引库不支持修改已有的属性,但可以增加属性

PUT /user/_mapping
{
  "properties": {
    "age": {
      "type": "integer"
    }
  }
}

查询索引库

GET /user

 


 

es 文档操作

新增文档

POST /user/_doc/1
{
  "info": "学习使我快乐",
  "email": "xxx@qq.com",
  "age": "18",
  "name": {
    "firstName": "code",
    "lastName": "horse"
  }
}

删除文档

DELETE /user/_doc/1

修改文档

全量修改:先删除,后新建(如果没有,也会新建)

PUT /user/_doc/1
{
  "info": "学习使我快乐222222222222222",
  "email": "xxx@qq.com",
  "age": "18",
  "name": {
    "firstName": "code",
    "lastName": "horse"
  }
}

增量修改:只修改指定字段的值

POST /user/_update/1
{
  "doc": {
    "info": "学习使我快乐333333333333"
  }
}

查询文档

GET /user/_doc/1

 


 

Java使用ES (RestAPI)

官方使用文档:https://www.elastic.co/guide/en/elasticsearch/client/index.html
在这里插入图片描述
本教程使用的是 Migrating from the High Level Rest Client

导入依赖

pom.xml


<!--FastJson  官方需要的other dependencies-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.71</version>
</dependency>

springboot依赖管理有可能会给你导入的依赖版本会给覆盖掉
在这里插入图片描述
解决方案:覆盖springboot的版本

<properties>
    <elasticsearch.version>7.12.1</elasticsearch.version>
</properties>

在这里插入图片描述

操作索引库

IndexDatabaseTest.java

public class IndexDatabaseTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void setUp() {  // 创建es连接
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.137.139:9200")
        ));
    }

    @Test
    public void clientStatus() {    // 查看是否连接成功
        System.out.println(client);
    }

    // 创建索引库
    @Test
    public void createIndexDataBase() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("user");
        String createIndexDataBaseDSL = "{\n" +
                "  \"mappings\": {\n" +
                "    \"properties\": {\n" +
                "      \"info\": {\n" +
                "        \"type\": \"text\",\n" +
                "        \"analyzer\": \"ik_smart\"\n" +
                "      },\n" +
                "      \"email\": {\n" +
                "        \"type\": \"keyword\",\n" +
                "        \"index\": \"false\"\n" +
                "      },\n" +
                "      \"name\": {\n" +
                "        \"type\": \"object\",\n" +
                "        \"properties\": {\n" +
                "          \"fistName\": {\n" +
                "            \"type\": \"keyword\"\n" +
                "          },\n" +
                "          \"lastName\": {\n" +
                "            \"type\": \"keyword\"\n" +
                "          }\n" +
                "        }\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}";
        request.source(createIndexDataBaseDSL, XContentType.JSON);
        client.indices().create(request, RequestOptions.DEFAULT);
    }

    // 删除索引库
    @Test
    public void deleteIndexDataBase() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("user");
        client.indices().delete(request, RequestOptions.DEFAULT);
    }

    // 修改索引库(只支持增加mapping)
    @Test
    public void updateIndexDataBase() throws IOException {
        PutMappingRequest request = new PutMappingRequest("user");
        request.source("{\n" +
                "  \"properties\": {\n" +
                "    \"age\": {\n" +
                "      \"type\": \"integer\"\n" +
                "    }\n" +
                "  }\n" +
                "}\n", XContentType.JSON);
        client.indices().putMapping(request, RequestOptions.DEFAULT);
    }

    // 查找索引库
    @Test
    public void getIndexDataBase() throws IOException {
        GetIndexRequest request = new GetIndexRequest("user");
        GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT);

        Map<String, MappingMetadata> mappings = getIndexResponse.getMappings();
        System.out.println(mappings.get("user").sourceAsMap().values());
    }


    @AfterEach
    public void unMount() throws IOException { 	// 断开es连接
        this.client.close();
    }

}

 

操作文档

DocTest.java

public class DocTest {
    private RestHighLevelClient client;

    @BeforeEach
    void setUp() {  // 创建es连接
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.137.139:9200")
        ));
    }

    @Test
    public void clientStatus() {    // 查看是否连接成功
        System.out.println(client);
    }

    // 创建文档
    @Test
    public void createIndexDataBase() throws IOException {
        IndexRequest request = new IndexRequest("user").id("1");
        String createDocDSL = "{\n" +
                "  \"info\": \"学习使我快乐\",\n" +
                "  \"email\": \"xxx@qq.com\",\n" +
                "  \"name\": {\n" +
                "    \"firstName\": \"code\",\n" +
                "    \"lastName\": \"horse\"\n" +
                "  }\n" +
                "}";
        request.source(createDocDSL,XContentType.JSON);
        client.index(request, RequestOptions.DEFAULT);
    }

    // 删除文档
    @Test
    public void deleteIndexDataBase() throws IOException {
        DeleteRequest request = new DeleteRequest("user", "1");
        client.delete(request, RequestOptions.DEFAULT);
    }

    // 修改文档 (API实现的是全量修改)
    @Test
    public void updateIndexDataBase() throws IOException {
        UpdateRequest request = new UpdateRequest("user", "1");
        request.doc("{\n" +
                "    \"info\": \"学习使我痛苦!!!!!!!\"\n" +
                "  }", XContentType.JSON);
        client.update(request, RequestOptions.DEFAULT);
    }

    // 查找文档
    @Test
    public void getIndexDataBase() throws IOException {
        GetRequest request = new GetRequest("user", "1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);

        String json = response.getSourceAsString();
        System.out.println(json);
    }

    @Test
    private Map<String, Object> getData(String text) {
        Map<String, Object> map = new HashMap<>();
        map.put("info", text);
        map.put("email", text + "@qq.com");
        Map<String, String> name = new HashMap<>();
        name.put("firstName", text);
        name.put("lastName", text);
        map.put("name", name);
        System.out.println(JSON.toJSONString(map));
        return map;
    }

    // 批量导入文档
    @Test
    public void testBulk() throws IOException {
        BulkRequest request = new BulkRequest();
        for (int i = 1; i <= 200; i ++ ) {
            String text = String.valueOf(i);
            Map<String, Object> data = getData(text);
            request.add(new IndexRequest("user")
                    .id(text)
                    .source(JSON.toJSONString(data), XContentType.JSON)
            );
        }
        client.bulk(request, RequestOptions.DEFAULT);
    }

    @AfterEach
    public void unMount() throws IOException { // 断开es连接
        this.client.close();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqli-labs复现

sqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建 下载phpstudy phpstudy是一个可以快速帮助我们搭建web服务器环境的软件 官网&#xff1a;https://www.xp.cn/ 这里我选择的是windows 64bit 客户端版本&#xff0c;安装路径为C:\php…

docker 安装xxljob

1. 安装mysql镜像 2.初始化xxljob的数据库和表 一、初始化db:https://codechina.csdn.net/mirrors/xuxueli/xxl-job/-/blob/2.3.1/doc/db/tables_xxl_job.sql 对脚本进行修改&#xff0c;添加ROW_FORMATDYNAMIC 安装xxljob 镜像 docker pull xuxueli/xxl-job-admin:2.3.1 …

networkX-02-基础指标

文章目录 1.度1.1 度1.2 入度1.3 出度1.4 加权度1.5 邻居节点1.5.1 邻居节点计算1.5.2 出度邻居节点1.5.3 入度邻居节点 2.节点数、边数3.最短路径3.1 最短路径(不带权重)3.2 最短路径(带权重) 4.计算图中所有的最短路径 教程仓库地址&#xff1a;github networkx_tutorial imp…

肖sir__设计测试用例方法之等价类02_(黑盒测试)

设计测试用例方法之等价类02_&#xff08;黑盒测试&#xff09; 一、掌握常用的设计方法: 黑盒测试方法&#xff1a;等价类、边界值&#xff0c;状态迁移法、场景法、判定表、因果图、正交表&#xff0c;&#xff08;7种&#xff09; 经验测试方法&#xff1a;错误推测法、异常…

file.raw和file在formdata中上传时遇到的坑!!

首先是这样&#xff0c;我在写一个表单上传页面的时候&#xff0c;结合elementeplus遇到了需要上传图片文件和视频文件的情况&#xff0c;一顿上网猛搜&#xff0c;经过一二十篇博客浏览下来&#xff0c;找到了三四篇可以参考&#xff0c;但是对于到底是上传file还是file.raw说…

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数&#xff0c;它接受一个参数 index。当按钮被点击时&#xff0c;这个函数会被调用&#xff0c;并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

JDK8安装及系统变量配置(包含错误处理)

jdk安装 一.下载JDK二.安装三.配置系统变量四.可能遇到的问题1.显示已经安装的问题 或者 读取注册表项值失败2.原因3.解决 五.验证安装成功 一.下载JDK JDK下载官网 二.安装 双击之后&#xff0c;一直下一步就ok 三.配置系统变量 1.找到配置系统变量的地方 2.配置系统变…

[E2E Test] Python Behave Selenium 一文学会自动化测试

前言 本文将使用Python Behave与Selenium&#xff0c;和同学们一起认识自动化测试&#xff0c;并附上完整的实践教程。 项目源码已上传&#xff1a;CSDN 郭麻花 Azure Repo python-behave-selenium 核心概念 1. 什么是E2E Test E2E即End-to-end&#xff0c;意思是从头到尾…

Linux执行命令

命令格式 主命令 选项 参数&#xff08;操作对象&#xff09;例如&#xff1a; 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令&#xff08;builtin&#xff09;&#xff1a;shell程序自带的命令。 外部命令&#xff1a;有独立…

tensorRT从零起步高性能部署:课程总结

目录 前言1. cuda驱动API2. cuda运行时API3. tensorRT基础4. tensorRT高级5. tensorRT封装6. 自动驾驶案例项目总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&…

1、Flutter移动端App实战教程【环境配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK&#xff0c;一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验&#xff0c;主要在于其拥有高性…

自然语言处理:提取长文本进行文本主要内容(文本意思)概括 (两种方法,但效果都一般)

本文主要针对长文本进行文本提取和中心思想概括&#xff0c;原文档放在了附件里面&#xff1a;<科大讯飞公告> -----------------------------------方法一&#xff1a;jieba分词提取文本&#xff08;句子赋分法&#xff09;------------------------- 1、首先导入相关…

docker笔记7:Docker微服务实战

1.通过IDEA新建一个普通微服务模块 建Module docker_boot 改POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

【聚类】K-Means聚类

cluster&#xff1a;簇 原理&#xff1a; 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说&#xff0c;就是首先初始化k个簇心&#xff1b;然后计算所有点到簇心的欧式距离&#xff0c;对一个点来说&#xff0c;距离最短就属于那个簇&#xff1b;然后更新不同簇的簇心&a…

nginx中模块的设置以及反向代理

nginx设置 nginx http 模块的配置文件位于 "/apps/nginx/conf/nginx.conf"&#xff08;以自己安装时选择的目录为准&#xff0c;若使用yum安装&#xff0c;则在 /etc/nginx/nginx.conf&#xff09;。在该文件中&#xff0c;需要定义一些常见的配置项&#xff0c;包括…

《Communicative Agents for Software Development》全文翻译

《Communicative Agents for Software Development》- 沟通性智能主体促进软件开发 论文信息Abstract1. Introduction2. CHATDEV2.1 聊天链2.2 设计2.3 编码2.4 测试2.5 记录 3. 实验4. 讨论5. 相关工作6. 结论 论文信息 题目&#xff1a;《Communicative Agents for Software…

TienChin 渠道管理-查看渠道接口

自定义 hasPermission 校验规则 自定义一个 Spring Security hasPermission 校验规则&#xff1a; 在 tienchin-framework 模块当中进行自定义&#xff0c;新建 CustomSecurityExpressionRoot.java 自定义 hasPermission 判断逻辑类&#xff1a; /*** author BNTang* version 1…

SSM框架-Spring框架核心知识梳理

目录 一、SpringIoC 1.1认识SpringIoC容器 1.2基于xml配置SpringIoC容器 1.3基于xml配置下Bean的生命周期和作用域 1.4 基于xml与注解配置SpringIoC容器 1.5 基于完全注解类配置SpringIoc容器 二、SpringAop面对切面编程 2.1认识SpringAop面向切面编程 2.2SpringAop基…

list【2】模拟实现(含迭代器实现超详解哦)

模拟实现list 引言&#xff08;实现概述&#xff09;list迭代器实现默认成员函数operator* 与 operator->operator 与 operator--operator 与 operator!迭代器实现概览 list主要接口实现默认成员函数构造函数析构函数赋值重载 迭代器容量元素访问数据修改inserterasepush_ba…