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

学习文档地址


一、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.2container_name: elasticsearch8.3.2hostname: elasticsearch8.3.2privileged: truetty: truerestart: unless-stoppedenvironment:- TZ=Asia/Shanghai- "ES_JAVA_OPTS=-Xms256m -Xmx256m"- discovery.type=single-nodeports:- "9200:9200"networks:- es_networkvolumes:- ./data/:/usr/share/elasticsearch/data- ./plugins:/usr/share/elasticsearch/plugins- ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlkibana:image: kibana:8.3.2container_name: kibana8.3.2hostname: kibana8.3.2restart: alwaysprivileged: truetty: true# volumes:# - ./etc/localtime:/etc/timezone# - ./etc/localtime:/etc/localtimeenvironment:- TZ=Asia/Shanghai- I18N_LOCALE=zh-CN- XPACK_GRAPH_ENABLED=true- TIMELION_ENABLED=true- XPACK_MONITORING_COLLECTION_ENABLED="true"ports:- "5601:5601"links:- elasticsearch:elasticsearchdepends_on:- elasticsearchnetworks:- 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/_idPUT /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@Builderpublic 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.mzph.cn/news/175132.shtml

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

相关文章

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

Ubuntu 22.03 LTS 安装deepin-terminal 分屏

安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0c;鼠标点击可以切换…

三方支付接口成为了电商竞争力的新动力

在当前快速发展的互联网时代&#xff0c;随着电子商务行业的兴起&#xff0c;支付体验已经成为企业获取竞争优势的重要因素。一个快速、安全、便捷的支付环节不仅可以提升用户的体验&#xff0c;还能有效促进交易的完成。在众多支付解决方案中&#xff0c;三方支付接口因其独特…

PCL 计算点云图中任意两点的欧式距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 使用PCL实现在可视化界面上用鼠标点选两个点,输出两点的坐标和两点之间的欧式距离。 二、代码…

linux 内核线程

内核线程类似于用户进程&#xff0c;通常用于并发处理些工作&#xff0c;它是一种在内核空间实现后台任务的方式&#xff0c;并且可以参与时间片轮转调度。 内核线程可以进行繁忙的异步事件处理&#xff0c;也可以睡眠等待某事件的发生&#xff0c;内核线程可以访问内核函数和…

Linux操作系统使用及C高级编程-D17D18编译与调试

编译 当有线程创建时编译&#xff1a;gcc test.c -o test -lpthread 分文件编写时主要是分为&#xff1a;.c&#xff08;函数声明的具体实现&#xff09;、.h&#xff08;说明性文件&#xff1a;#define 结构体共用体 声明&#xff09;、.c(main) 条件编译 一般情况下&#x…

激光线提取

在做单线激光三维重建&#xff0c;和多线激光三维重建的时候都会设计到激光线提取算法的实现&#xff0c;如何保持高速和高精度是关键 &#xff0c;最近优化了steger中心线提取算法&#xff0c;通过并行化实现在cpu版本可以做到2m,GPU版本可以做到0.6ms左右&#xff0c;完全可…

Flask 运用Xterm实现交互终端

Xterm是一个基于X Window System的终端仿真器&#xff08;Terminal Emulator&#xff09;。Xterm最初由MIT开发&#xff0c;它允许用户在X Window环境下运行文本终端程序。Xterm提供了一个图形界面终端&#xff0c;使用户能够在图形桌面环境中运行命令行程序。而xterm.js是一个…

Kotlin学习——kt入门合集博客 kt里的委派模式Delegation kt里的特性

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

[SpringCloud] SpringCloud配置中心的核心原理

SpringCloud是什么时候去拉取配置中心的配置中心客户端的配置信息为什么要写在bootstrap文件中对象中注入的属性是如何动态刷新的一些开源的配置中心是如何整合SpringCloud的 文章目录 1.从SpringBoot的启动过程说起1.1 大致过程 2.准备Environment的核心操作2.1 前置操作 3.pr…

SEOAI每周资讯和Linus思考 231127

欢迎查看 Linus筋斗云SEO 的每周资讯整理&#xff0c;本周的一些要点&#xff1a; Google11月核心更新和评论更新仍然没有结束9个搜索结果页的主要变化&#xff1a;图标、品牌、粉丝数、新模块GSC已索引页面狂掉&#xff1f;Google的问题&#xff0c;已修复黑五网一期间的搜索…

强化学习中的Q学习

Q学习&#xff08;Q-Learning&#xff09;是强化学习中的一种基于值的学习方法&#xff0c;用于在有限马尔可夫决策过程&#xff08;MDP&#xff09;中学习最优的动作策略。Q学习主要用于离散状态和离散动作的问题。 以下是Q学习的基本概念和步骤&#xff1a; Q-Value&#xf…

在Spring Boot中隔离@Async异步任务的线程池

在异步任务执行的时候&#xff0c;我们知道其背后都有一个线程池来执行任务&#xff0c;但是为了控制异步任务的并发不影响到应用的正常运作&#xff0c;我们需要对线程池做好相关的配置&#xff0c;以防资源过度使用。这个时候我们就考虑将线程池进行隔离了。 那么我们为啥要…

【数据结构初阶】单链表

各位读者老爷好&#xff0c;鼠鼠我又来了哈。鼠鼠我呀现在来基于C语言实现以下单链表&#xff0c;希望对你有所帮助&#xff01; 目录 1.链表的概念及结构 2.链表的分类 3.无头单向非循环链表的实现 3.1.单链表打印 3.2.单链表尾插 3.3.单链表头插 3.4.单链表尾删 3.5…

在OpenCV中基于深度学习的边缘检测

引言 如何在OpenCV中使用基于深度学习的边缘检测&#xff0c;它比目前流行的canny边缘检测器更精确。边缘检测在许多用例中是有用的&#xff0c;如视觉显著性检测&#xff0c;目标检测&#xff0c;跟踪和运动分析&#xff0c;结构从运动&#xff0c;3D重建&#xff0c;自动驾驶…

MyBatis-Plus及多数据源入门教程

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2、MySQL 8.0.34 框架介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis 是一款非常优秀的开源…

训练 CNN 对 CIFAR-10 数据中的图像进行分类

1. 加载 CIFAR-10 数据库 import keras from keras.datasets import cifar10# 加载预先处理的训练数据和测试数据 (x_train, y_train), (x_test, y_test) cifar10.load_data() 2. 可视化前 24 个训练图像 import numpy as np import matplotlib.pyplot as plt %matplotlib …

leetcode:506. 相对名次

一、题目 函数原型&#xff1a;char** findRelativeRanks(int* score, int scoreSize, int* returnSize) 二、思路 创建一个新的数组newscore&#xff0c;将原数组数据拷贝到新数组&#xff0c;降序排序新数组。 遍历原数组&#xff0c;在新数组中找到原数组中数据在新数组中的…

优雅使用docker-compose部署Skywalking

Skywalking使用docker-compose部署 version: 3.1 services: // 部署elasetic search 用于存储获取的应用信息与日志elasticsearch:image: elasticsearch:7.13.3container_name: elasticsearchprivileged: trueenvironment:- "cluster.nameelasticsearch" #设置集群名…

算法通关村第十二关-黄金挑战字符串冲刺题

最长公共前缀 描述 : 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 题目 : LeetCode 14.最长公共前缀 : 分析 : 第一种方式&#xff0c;我们可以竖着比较&#xff0c;如图所示&#xff0c;每前进一个位置就…