ES 8.x开始(docker-compose安装、kibana使用、java操作)

news2024/11/26 2:51:58

学习文档地址


一、Docker安装


这里使用docker-compose来安装,方便后续迁移,Elasticserach和kibina一起安装。


1、创建安装目录

  • config
  • data
  • plugins

2、配置文件


配置文件有两个,一个是ES的配置文件,一个docker-compose的配置文件


2-1、es配置文件(放config目录下)


下面的配置文件需要把IP修改为自己的本级IP network.publish_host

# 集群名称
cluster.name: xdx-es
# 节点名称
node.name: es-node-1
# 绑定host,0.0.0.0代表当前节点的ip
network.host: 0.0.0.0
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip),修改成自己ip
network.publish_host: 192.168.2.18
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
# transport.tcp.port: 9300
# 是否支持跨域,默认为false
http.cors.enabled: true
# 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?:\/\/localhost(:[0-9]+)?/
http.cors.allow-origin: "*"
# 表示这个节点是否可以充当主节点
# node.master: true
# 是否充当数据节点
# node.data: true
# 所有主从节点ip:port 
# discovery.seed_hosts: ["192.168.2.18:9300"]  #本地只有一个节点,无法正常启动,先注释
# 这个参数决定了在选主过程中需要 有多少个节点通信  预防脑裂 N/2+1
# discovery.zen.minimum_master_nodes: 1
#初始化主节点
#cluster.initial_master_nodes: ["es-node-1"]
# 内存交换
bootstrap.memory_lock: true
# 关闭认证授权
xpack.security.enabled: false

2-2、docker-compose

version: '3.0'
services:
  elasticsearch:
    image: elasticsearch:8.3.2
    container_name: elasticsearch8.3.2
    hostname: elasticsearch8.3.2
    privileged: true
    tty: true
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - es_network
    volumes:
      - ./data/:/usr/share/elasticsearch/data
      - ./plugins:/usr/share/elasticsearch/plugins
      - ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

  kibana:
    image: kibana:8.3.2
    container_name: kibana8.3.2
    hostname: kibana8.3.2
    restart: always
    privileged: true
    tty: true
    # volumes:
      # - ./etc/localtime:/etc/timezone
      # - ./etc/localtime:/etc/localtime
    environment:
      - TZ=Asia/Shanghai
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    links:
      - elasticsearch:elasticsearch
    depends_on:
      - elasticsearch
    networks:
      - es_network
networks:
  es_network:
    driver: bridge

完整目录如下:

在这里插入图片描述


2-3、启动ES


在ES安装目录下运行 docker-compose up -d

在浏览器输入 http://localhost:9200/ 看到如下JSON,ES安装完成

在这里插入图片描述


在浏览器输入 http://localhost:5601/ 看到如下界面,Kibina 安装完成

在这里插入图片描述


二、使用Kibana操作ES


其实可以简单把ES中的索引(index)理解成表,那对于表的操作,肯定就是创建表、增删字段,以及对表中数据的增删改查。

Kibana提供了操作ES的控制台,通过如下路径进入控制台

在这里插入图片描述


1、index 操作

1-1、创建一个索引


创建一个名为my-index-two 的索引,里面有三个字段

  1. 文本类型的 name
  2. 数字类型的 age
  3. 数组类型的 tags
PUT /my-index-two
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "age": { "type": "integer" },
      "tags":{
        "type": "text",
        "fields": {
          "keyword":{
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

1-2、为索引新增一个字段

PUT /my-index-two/_mapping
{
  "properties": {
    "conutry": {
      "type": "text"
    }
  }
}

1-3、查看索引信息

# 查看索引信息
GET /_cat/indices/my-index-one?v&pretty

# 查看settings信息
GET /my-index-one/_settings

# 查看_mapping信息
GET /my-index-one/_mapping

在这里插入图片描述


2、数据操作


2-1、为索引文档新增一条数据


my-index-two 索引,添加一条 id = 2,的数据

# PUT /index_name/_doc/_id

PUT /my-index-two/_doc/2
{
  "name": "李四",
  "age": "20",
  "conutry": "java",
  "tags": ["xxx", "你好", "zzz"]
}

在这里插入图片描述


2-2、查询索引中的数据


查询 my-index-two 索引中,id = 2,的数据

GET /my-index-two/_doc/2

在这里插入图片描述


除了用id精准匹配,使用ES更多的是做高亮搜索,比如想要搜索 tags中带 的标签

GET /my-index-two/_search
{
  "query": {
    "match": {
      "tags": {
        "query": "你",
        "fuzziness": "AUTO"
      }
    }
  },
  "highlight": {
    "fields": {
      "tags": {}
    }
  }
}

在这里插入图片描述


默认它的高亮是用 <em> </em> 标签,也可以改变它使用自定义标签

GET /my-index-two/_search
{
  "query": {
    "match": {
      "tags": {
        "query": "你",
        "fuzziness": "AUTO"
      }
    }
  },
  "highlight": {
    "fields": {
      "tags": {
          "pre_tags": ["<b>"],
          "post_tags": ["</b>"]
      }
    }
  }
}

在这里插入图片描述


2-3、删除索引中的数据


# 删除文档id为 1 的数据
DELETE /my-index-two/_doc/1

# 删除 name中带有 三 的数据
POST /my-index-two/_delete_by_query
{
  "query": {
    "term": {
      "name": "三"
    }
  }
}

在这里插入图片描述


三、使用Java操作ES


3-1、引入依赖


非SpringBoot项目使用

<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>
<!--It may happen that after setting up the dependencies, your application fails with ClassNotFoundException: jakarta.json.spi.JsonProvider.-->
<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.1</version>
</dependency>

SpringBoot 项目使用

<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.3.3</version>
</dependency>
<!--It may happen that after setting up the dependencies, your application fails with ClassNotFoundException: jakarta.json.spi.JsonProvider.-->
<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.1</version>
</dependency>

3-2、CRUD

package com.xdx.cv.controller;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

import java.io.IOException;
import java.util.List;

public class Test {

    public static void main(String[] args) throws IOException {

        // 创建连接
        RestClient restClient = RestClient.builder(new HttpHost("127.0.0.1", 9200)).build();
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        ElasticsearchClient elasticsearchClient  = new ElasticsearchClient(transport);
        System.out.println("elasticsearchClient = " + elasticsearchClient);


        XdxTest build = XdxTest.builder().age(3).conutry("xxx").name("xxx").build();

        // 删除数据
        DeleteResponse deleteResponse = elasticsearchClient.delete(s -> s.index("my-index-two").id(build.age.toString()));
        System.out.println("删除结果: " + deleteResponse.result());

        // 插入数据
        IndexResponse indexResponse = elasticsearchClient.index(s -> s.index("my-index-two").id(build.age.toString()).document(build));
        System.out.println("新增文档结果: " + indexResponse.result());

        // 构建修改文档的请求
        XdxTest buildTwo = XdxTest.builder().age(3).conutry("xxxTwo").name("xxxTwo").build();
        UpdateResponse<XdxTest> updateResponse = elasticsearchClient.update(e -> e
                .index("my-index-two")
                .id(build.age.toString())
                .doc(buildTwo),
                XdxTest.class
        );
        System.out.println("修改文档结果:" + updateResponse.result());

        // 基于id查询数据
        GetResponse<XdxTest> getResponse = elasticsearchClient.get(s -> s.index("my-index-two").id("2"),XdxTest.class);
        System.out.println("基于id查询结果: " + getResponse.source().getConutry());

        // 高亮查询
        SearchResponse<XdxTest> response = elasticsearchClient.search(s -> s
                .index("my-index-two")
                .query(q -> q
                        .term(t -> t
                        .field("name")
                        .value("四"))
                )
                .highlight(h -> h
                .fields("name", f -> f
                .preTags("<font color='red'>")
                .postTags("</font>")))
                .source(source -> source
                    .filter(f -> f
                        .includes("name","id")
                        .excludes("")
                    )
                ),
                XdxTest.class
        );
        List<Hit<XdxTest>> hits = response.hits().hits();
        System.out.println("高亮查询结果" + hits.get(0).highlight().get("name"));

        restClient.close();
    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class XdxTest {
        private String name;

        private Integer age;

        public String conutry;

        public List<String> tags;
    }
}

执行结果

elasticsearchClient = co.elastic.clients.elasticsearch.ElasticsearchClient@3d36e4cd
删除结果: Deleted
新增文档结果: Created
修改文档结果:Updated
基于id查询结果: java
高亮查询结果[<font color='red'></font>]

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

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

相关文章

Java自定义一个线程池

线程池图解 线程池与主线程之间通过一个阻塞队列来平衡任务分配&#xff0c;阻塞队列中既可以满足线程等待&#xff0c;又要接收主线程的任务。 线程池实现 使用一个双向链表实现任务队列 创建任务队列 //阻塞队列 public class BlockingQueue<T> {//双线链表private …

【一周AI简讯】OpenAI奥特曼王者归来,马斯克AI模型Grok下周开放测试,ChatGPT语音对话功能向所有用户免费开放

OpenAI奥特曼王者归来&#xff0c;董事会改组 终于&#xff0c;经历大约5天的极限拉扯&#xff0c;年底AI界吃瓜大戏落下帷幕&#xff0c;奥特曼确认回归。 ChatGPT语音对话功能向所有用户免费开放 ChatGPT 语音输入最初于 9 月份推出&#xff0c;标题是“ChatGPT 现在可以看…

[Spring ~必知必会] Bean 基础常识汇总

文章目录 Bean 相关到底什么是beanFactorybeanFactory能干啥ApplicationContext是什么ApplicationContext的功能比 BeanFactory多了什么 容器的实现BeanFactory的实现ApplicationContext的实现xml 配置配置类配置 Bean 的生命周期3.1 Bean 的常见的后处理器测试代码总结 3.2 工…

【中间件】配置中心中间件intro

中间件middleware 内容管理 why use 配置中心配置中心feature配置中心develop主流配置中心Apollo浅谈 本文从理论上介绍一下服务化中服务治理系统中的配置中心的理论并浅析Apllo 配置在生产中是很关键的一个部分&#xff0c;cfeng在work中遇到几次配置问题引发的问题&#xff0…

为何要隐藏IP地址?网络上哪些行为需要隐藏IP和更换IP?

网络已经成为现代人生活的重要组成部分&#xff0c;人们在网络上交流、学习、娱乐、购物等。但是&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要时刻保护自己的隐私和安全。其中&#xff0c;IP地址作为网络通信中的重要标识&#xff0c;如何隐藏以及在哪些情况下需…

电商数据采集中如何采集1688平台商品详情SKU数据

一、背景介绍 1688.com是阿里旗下国内最大的B2B批发采购平台&#xff0c;1688分销客是依托此平台的官方营销平台&#xff0c;通过此平台API接口的接入推广平台商家的商品&#xff0c;按照商品成交金额的一定比例获得佣金。可以调用1688平台上的商品详情&#xff0c;SKU数据&…

西南科技大学电路分析基础实验A1(一阶电路的设计)

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 四、实验数据及结果分析(预习写必要实验步骤和表格) 1. 观测一阶电

万字解析设计模式之观察者模式、中介者模式、访问者模式

一、观察者模式 1.1概述 观察者模式是一种行为型设计模式&#xff0c;它允许一个对象&#xff08;称为主题或可观察者&#xff09;在其状态发生改变时&#xff0c;通知它的所有依赖对象&#xff08;称为观察者&#xff09;并自动更新它们。这种模式提供了一种松耦合的方式&…

什么是高性能计算岗位

最近有小伙伴咨询什么是高性能计算岗位。 1、什么是高性能计算 高性能计算&#xff0c;在很多招聘信息中也会被标注为 HPC&#xff0c;是 High Performance Computing 的缩写。 目前很多 AI 公司或者从事 AI 的部门招聘都有这个岗位需求&#xff0c;我从某聘上截取了几个有代…

VBA高级应用30例:Ribbon(功能区)的介绍

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

【Proteus仿真】【STM32单片机】感应水龙头设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶模块、HCSR04超声波等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示超声波模块检测的距离&#xff0c;若检测距离小…

二十九、微服务案例完善(数据聚合、自动补全、数据同步)

目录 一、定义 二、分类 1、桶(Bucket)聚合: 2、度量(Metric&#xff09;聚合: 3、管道聚合&#xff08;Pipeline Aggregation&#xff09;&#xff1a; 4、注意&#xff1a; 参与聚合的字段类型必须是: 三、使用DSL实现聚合 聚合所必须的三要素&#xff1a; 聚合可配…

数字系列——数字经济

数字经济是全球经济未来发展方向&#xff0c;正在成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。都知道数字经确实很重要&#xff0c;但有些人还傻傻搞不懂数字经济到底是什么&#xff1f;小编今天就给大家捋一捋。 什么是数字经济&#xff1f; 数字经…

tabs切换,组件库framework7

IOS和安卓兼容的背景下&#xff0c; 可以使用&#xff1a;framework7.io文档 效果展示&#xff1a; 代码&#xff1a; <!-- Top Tabs --> <div class"tabs tabs-top"><div class"tab tab1 active">...</div><div class"…

高级/进阶”算法和数据结构书籍推荐

“高级/进阶”算法和数据结构书籍推荐《高级算法和数据结构》 高级算法和数据结构 为什么要选择本书 谈及为什么需要花时间学算法&#xff0c;我至少可以列举出三个很好的理由。 (1)性能&#xff1a;选择正确的算法可以显著提升应用程序的速度。仅就搜索来说&#xff0c;用二…

jQuery_07 函数的使用

在jQuery中&#xff0c;如何使用函数呢&#xff1f; 1.基本函数 函数(常用的) 其实有很多函数&#xff0c;但是我们只需要掌握常用的函数即可 1.val 操作dom对象的value val() 没有参数 获取dom数组中第一个dom对象的value值 val(value) 有参数 设置dom数组中所有dom对象的…

毫米波雷达DOA角度计算-----DBF算法

DBF算法实现程序如下&#xff1a; 输入&#xff1a; parameter 是 毫米波雷达的参数设置。 antVec 是 目标点的8个虚拟天线的非相参积累数据。 function [angle,doa_abs] dbfMethod(parameter,antVec)txAntenna parameter.txAntenna; % 发射天线 [1 1]rxAntenna para…

使用功能点估算法进行估算,5大注意事项

功能点估算法在软件项目管理中起着重要的作用&#xff0c;其有助于项目的早期估算&#xff0c;更准确地预测项目成本和进度&#xff0c;有助于更好地理解项目规模&#xff0c;并做出相应的资源分配和进度安排。如果不使用此估算方法&#xff0c;可能会导致项目范围不清晰&#…

R语言期末考试复习二

上篇文章的后续&#xff01;&#xff01;&#xff01;&#xff01; http://t.csdnimg.cn/sqvYD 1.给向量vec1设置名为"A","B","C","D","E","F","G"。 2.将矩阵mat1的行名设置为"Row1"&#…

Unreal Engine 学习笔记 (4)—— 多方向动画

1.创建混合空间 1.设置水平方向命名为Direction表示行进方向 -45,300表示向左前方45度方向行走-90,300表示向正左方90度方向行走-135,300表示向左后方45度方向行走-180,300表示向正后方行走右侧方向动画与上述左侧使用同样方法设置Run动画与Walk动画使用同样方法设置 2. 设置…