Elasticsearch、Kibana以及Java操作ES 的快速使用
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 esocker 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 kibanaocker 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;@BeforeEachpublic void setUp() { // 创建es连接this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.137.139:9200")));}@Testpublic void clientStatus() { // 查看是否连接成功System.out.println(client);}// 创建索引库@Testpublic 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);}// 删除索引库@Testpublic void deleteIndexDataBase() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("user");client.indices().delete(request, RequestOptions.DEFAULT);}// 修改索引库(只支持增加mapping)@Testpublic 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);}// 查找索引库@Testpublic 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());}@AfterEachpublic void unMount() throws IOException { // 断开es连接this.client.close();}}
操作文档
DocTest.java
public class DocTest {private RestHighLevelClient client;@BeforeEachvoid setUp() { // 创建es连接this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.137.139:9200")));}@Testpublic void clientStatus() { // 查看是否连接成功System.out.println(client);}// 创建文档@Testpublic 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);}// 删除文档@Testpublic void deleteIndexDataBase() throws IOException {DeleteRequest request = new DeleteRequest("user", "1");client.delete(request, RequestOptions.DEFAULT);}// 修改文档 (API实现的是全量修改)@Testpublic void updateIndexDataBase() throws IOException {UpdateRequest request = new UpdateRequest("user", "1");request.doc("{\n" +" \"info\": \"学习使我痛苦!!!!!!!\"\n" +" }", XContentType.JSON);client.update(request, RequestOptions.DEFAULT);}// 查找文档@Testpublic 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);}@Testprivate 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;}// 批量导入文档@Testpublic 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);}@AfterEachpublic void unMount() throws IOException { // 断开es连接this.client.close();}
}
相关文章:
Elasticsearch、Kibana以及Java操作ES 的快速使用
docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…...
逐鹿人形机器人,百度、腾讯、小米卷起来
长期不温不火的人形机器人产业迎来新风口,技术显著提升、新品层出不穷、资本投资态度也逐渐好转。 8月18日,2023世界机器人大会博览会正式开放,全面展示了机器人行业的新技术、新产品和新应用。据悉,此次展会展览总面积达4.5万平…...
AndroidStudio推荐下载和配置
1、推荐下载链接 Download Android Studio & App Tools - Android Developers 2、gradle配置案例 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url https://maven.aliyun.…...
mysql异常占用资源排查
通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…...
requests 库:发送 form-data 格式的 http 请求 (python)
安装 requests-toolbelt !pip install requests-toolbeltdemo from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{query: """第一,向量化匹配是有能力上限的。搜索引擎实现语义搜索已经是好几年的事情了…...
行测图形推理规律(一)元素组成
题库:粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的,但是总结的规律应该是一样的。 规律并不唯一,题库的答案也只是参考答案,切勿当杠精,你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…...
【python爬虫】13.吃什么不会胖(爬虫实操练习)
文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人,哪怕不健身,也会和我一样注重饮食的健康,在乎自己每天摄入的食物热量。 不过,生活中应该很少有人会…...
深入理解联邦学习——联邦学习与现有理论的区别与联系
分类目录:《深入理解联邦学习》总目录 作为一种全新的技术,联邦学习在借鉴一些成熟技术的同时也具备了一定的独创性。下面我们就从多个角度来阐释联邦学习和其他相关概念之间的关系。 联邦学习与差分隐私理论的区别 联邦学习的特点使其可以被用来保护用…...
基于Python+DenseNet121算法模型实现一个图像分类识别系统案例
目录 介绍在TensorFlow中的应用实战案例最后 一、介绍 DenseNet(Densely Connected Convolutional Networks)是一种卷积神经网络(CNN)架构,2017年由Gao Huang等人提出。该网络的核心思想是密集连接,即每…...
旋转图片两种方法
这两种方法在旋转图像时,可能会产生一些不同的效果: rotate_image_new()旋转后的图像完全包含旋转前的内容,并且填充边界尽可能小 rotate_image() 保持原始图像的大小,并根据填充选项决定是否填充边界为白色。如果 if_fill_whit…...
10 mysql tiny/small/medium/big int 的数据存储
前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 int 类类型的相关数据的存储 …...
UI自动化测试之Jenkins配置
团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试,但由于各种原因,接口自动化测试那部分功能整个废弃掉了,其中和易用性有很大关系…...
电视盒子什么品牌好?数码博主盘点目前性能最好的电视盒子
电视盒子是非常重要的,老人小孩基本每天都会看电视,而电视盒子作为电视盒子的最佳拍档销量十分火爆,我自己每个月都会测评几次电视盒子,今天给大家详细解读一下电视盒子什么品牌好,看看目前性能最好的电视盒子是哪些&a…...
对于枚举类型的输出
对于枚举类型的输出 对于枚举类型的输出,您可以使用以下方法:1. 将枚举值转换为整数进行输出:cppODU_TYPE type ODU_TYPE_331;int value static_cast<int>(type);std::cout << "ODU_TYPE: " << value <<…...
solidity开发环境配置,vscode搭配remix
#学习笔记 初学solidity,使用remix非常方便,因为需要的环境都配置好了,打开网站就可以使用。 不过在编写代码方面,使用vscode更方便,而vscode本身并不能像remix那样部署合约,它还需要安装插件。 点击红色箭…...
chatGPT生成代码--go组合算法
提问:用golang写一个组合算法函数zuhe(x,n),x为组合所需的字符,n 为组合后的字符串长度,例如 x"ab", n2 结果返回 aa,ab,bb,ba 结果:下面是一个用Go编写的生成长度为n的字符串组合的函数 zuhe,其…...
推荐6款普通人搞副业做自媒体AI工具
hi,同学们,我是赤辰,本期是赤辰第5篇AI工具类教程,文章底部准备了粉丝福利,看完可以领取!身边越来越多的小伙伴靠自媒体实现财富自由了!因此,推荐大家在工作之余或空闲时间从事自媒体…...
vs中git提交合并分支的步骤记录
vs打开终端 PS D:\project\et_lower4_driver> git pull Already up to date. PS D:\project\et_lower4_driver> git branch * kiyun_usb7851 master PS D:\project\et_lower4_driver> git checkout master Switched to branch master Your branch is up to date wit…...
PostgreSQL 备份恢复:pg_probackup
文章目录 前言1. 安装备份工具1.1 环境介绍1.2 RPM 安装1.3 验证 2. 配置备份工具2.1 初始化设置2.2 创建备份用户2.3 配置自动归档 3. 工具使用介绍3.1 init3.2 add-instance3.3 del-instance3.4 set-config3.5 show-config3.6 set-backup3.7 backup3.8 show3.9 delete3.10 re…...
博客程序系统其它功能扩充
一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…...
MATLAB 2023安装方法之删除旧版本MATLAB,安装新版本MATLAB
说明:之前一直使用的是MATLAB R2020b,但最近复现Github上的程序时,运行不了,联系作者说他的程序只能在MATLAB 2021之后的版本运行,因此决定安装最新版本的MATLAB。 系统:Windows 11 需要卸载的旧MATLAB 版…...
全国唯一一所初试考Java的学校!平均300分拿下
苏州科技大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1187字,预计阅读:3分钟 2023考情概况 苏州科技…...
day35 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
目录: 解题及思路学习 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美…...
ffmpeg批量转码
新建.bat文件 echo offfor %%s in (*.mp4) do ( echo %%s ffmpeg -i %%s -b 7M %%~ns7m.mp4 ) pause如果你的电脑有显卡,也可以使用硬件转码。转码程序链接...
时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测
时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiLSTM、PSO-BiLSTM和BiLSTM神经网络时间序列预测…...
【TypeScript学习】—基本类型(二)
【TypeScript学习】—基本类型(二) 一、TypeScript基本类型 //也可以直接用字面量进行类型声明let a:10; a10;//也可以使用 |来连接多个类型(联合类型)let b:"male"|"female"; b"male"; b"fe…...
uni-app点击复制指定内容(点击复制)
官方api uni.setClipboardData(OBJECT) uni.setClipboardData({data: 要被复制的内容,success: function () {console.log(success);} });...
无涯教程-Flutter - 简介
Flutter是一个由谷歌开发的开源移动应用软件开发工具包,用于为Android、iOS、 Windows、Mac、Linux、Google Fuchsia开发应用。 通常,创建移动应用程序是一个非常复杂和具有挑战性的任务。有许多框架可用,它提供了开发移动应用程序的出色函数…...
【STM32】学习笔记-时间戳RTC
Unix时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通…...
绿色能源迎来跨越式增长新时代
当今世界,百年未有之大变局加速演进,新一轮科技革命和产业变革深入发展,全球气候治理呈现新局面,新能源和信息技术紧密融合,生产生活方式加快转向低碳化、智能化,能源体系和发展模式正在进入非化石能源主导…...
企业网站组网方案/成都网站seo
and then interview#$%^&* again转载于:https://www.cnblogs.com/rexhost/archive/2005/07/08/188977.html...
做门面商铺比较好的网站/谷歌在线浏览入口
【故障处理】DG环境主库丢失归档情况下数据文件的恢复 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① BB…...
各大网站搜索引擎入口/广州网络营销的推广
要在PHPWEB网站中添加自己制作的PHP程序,如果不使用原来的数据库连接参数且自己另外准备一个数据库类的话,那PHP程序员自己随便写就行了,和PHPWEB并没什么关系。但如果你要使用PHPWEB原有的数据库连接参数和数据库调用方式(就是为了网站程序结…...
wordpress 附件密码保护/电脑软件推广平台
一、动图演示 二、思路分析 1. 相邻两个数两两相比,n[i]跟n[j1]比,如果n[i]>n[j1],则将连个数进行交换, 2. j, 重复以上步骤,第一趟结束后,最大数就会被确定在最后一位,这就是冒泡排序又称…...
东莞营销型网站开发/手机在线制作网站
先上演示地址: http://images.24city.com/jimmy/DeepZoom/ 步骤:1.先启动PhotoShop,利用自动等分切片功能把图片等分成若干小图片,并导出,参考下图: 2.启动Deep Zoom Composer a.新建项目,并用Add Image...导入刚才等分好的小图片 b.切换到c…...
ecshop商城模板/短视频seo营销
文章目录缺省函数1 缺省参数的函数调用2 多文件结构3 缺省函数的特点缺省函数 一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形…...