Elastic Search (ES)Java 入门实操(1)下载安装、概念

实现数据查询代码:Elastic Search(ES)Java 入门实操(2)搜索代码-CSDN博客

Elastic Search(ES)Java 入门实操(3)数据同步-CSDN博客

Elastic Search 官方描述,是一个分布式的搜素数据分析引擎,可以集中存储数据,快速完成搜索,微调相关性,进行强大的分析。

ES 中的索引、映射、文档和字段等概念和传统关系型数据库相似。可以结合数据库去理解。比如索引可以理解为表。

ES 使用了倒排索引机制来优化搜索效率。比如”唱跳rap篮球“,根据机制可能会为 唱跳、rap、篮球分别建立索引,当我们搜索其中一个关键词,就能搜索出来相关的结果,然后通过正排索引来详细展示相关文章。

官方文档:Quick start | Elasticsearch Guide [7.17] | Elastic

下载安装

需要下载的有 Elastic Search 和 kibana(可视化界面)

Elastic Search 下载地址:Elasticsearch 7.17.21 | Elastic

kibana 下载地址:Install Kibana on Windows | Kibana Guide [7.17] | Elastic

推荐下载 7.17版本,避免出现其他问题。

下载完成后直接解压即可,路径名不要带有中文

在解压目录的 bin 目录下使用 cmd 命令 elasticsearch 就可以启动,访问端口 localhost:9200

同样的 kibana 也是在 bin 目录下启动 kibana 命令,可视化界面的端口号是 5601

在左侧边栏使用 Dev Tools 即可进入控制台使用 ES 自己的操作数据的语法

DSL

应用最广的,是 Json 格式,好理解,和 http 请求兼容

官方文档:Query DSL | Elasticsearch Guide [7.17] | Elastic

新增数据

井号后面是注释,实际使用不需要

注意:当添加新数据时如果不指定 id ,ES 会自动生成,类型是 string 类型,如果需要在代码层面和 MySQL 同步,最好是新增的时候指定 id ,避免出现类型不同等其他问题。

POST#请求的类型 post_1#表的名称 /_doc/ 5#id
{ #字段和数据"title": "kun","desc": "唱跳"
}#结果
{"_index" : "post_v1","_type" : "_doc","_id" : "5","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 6,"_primary_term" : 3
}

查询

#查询对应的表
GET post_v1/_search
#根据 id 查询
GET post_v1/_doc/5

修改

POST post_v1/_doc/5
{"title": "cxk","desc": "ctrl"
}

 实际修改数据和新增数据格式差不多,只需要指定对应的 id 即可,如果表(索引)中没有对应的 id,就会直接创建新的数据。

一句话概括就是有就修改,没有就新增,所以也不会出现重复修改的情况,因为只要有就会修改。

删除

#删除普通索引
DELETE index_name
#删除数据流式索引
DELETE _data_stream/logs-my_app-default

ES 还有其他格式的 Query 格式命令,比如 EQL、SQL、Painless Scrpiting language,详情可以查看官方文档。

Mapping

官方文档:Mapping | Elasticsearch Guide [7.17] | Elastic

相当于数据库表的表结构,字段和字段类型。有的字段不指定会自动生成,比如主键 id。

ES 支持动态 mapping,表结构可以动态改变,如果表结构中不存在的字段,如果插入了数据,也能插入,并新增字段。

也可以手动指定字段类型,显式创建 mapping

PUT user
{"mappings": {"properties": {"age":    { "type": "integer" },  "email":  { "type": "keyword"  }, "name":   { "type": "text"  }     }}
}

分词器

顾名思义,就是 ES 的一种分词策略/规则

官方文档:Test an analyzer | Elasticsearch Guide [7.17] | Elastic

#使用空格分词
POST _analyze
{"analyzer": "whitespace","text":     "The quick brown fox."
}
#标准分词
POST _analyze
{"tokenizer": "standard","filter":  [ "lowercase", "asciifolding" ],"text":      "Is this déja vu?"
}
#关键词分词,整句当作一个关键词,不分开
POST _analyze
{"analyzer": "keyword","text":     "The quick brown fox."
}

官方提供的分词器问题在于对于中文来说不太友好 ,中文是不使用空格作为分隔的。

IK 分词器

中文友好,文档:GitHub - infinilabs/analysis-ik: 🚌 The IK Analysis plugin integrates Lucene IK analyzer into Elasticsearch and OpenSearch, support customized dictionary.

下载地址:Index of: analysis-ik/stable/ (infinilabs.com) 

注意版本,本文的 ES 版本为 7.17.21,避免出现兼容性问题

下载完成后在 ES 文件夹中新建 plugins 文件夹,然后把下载的插件解压到里面。重启 ES 和 kibana 即可加载。

载入成功

IK 分词器有两种:ik_smart、ik_max_word
打个比方,天青色等烟雨而我在等你,ik_smart 是按照系统自己认为的方式进行组词,比如青色,烟雨,ik_max_word 是最大细度得组词,比如,天青,青色,都是系统认为的词语。

POST _analyze
{"analyzer": "ik_smart","text":     "天青色等烟雨而我在等你"
}
#结果
{"tokens" : [{"token" : "天","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "青色","start_offset" : 1,"end_offset" : 3,"type" : "CN_WORD","position" : 1},{"token" : "等","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 2},{"token" : "烟雨","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "而我","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 4},{"token" : "在","start_offset" : 8,"end_offset" : 9,"type" : "CN_CHAR","position" : 5},{"token" : "等你","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 6}]
}
POST _analyze
{"analyzer": "ik_max_word","text":     "天青色等烟雨而我在等你"
}
#结果
{"tokens" : [{"token" : "天青","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "青色","start_offset" : 1,"end_offset" : 3,"type" : "CN_WORD","position" : 1},{"token" : "等","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 2},{"token" : "烟雨","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "而我","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 4},{"token" : "在","start_offset" : 8,"end_offset" : 9,"type" : "CN_CHAR","position" : 5},{"token" : "等你","start_offset" : 9,"end_offset" : 11,"type" : "CN_WORD","position" : 6}]
}

 即使使用了分词器,系统也不一定能够按照我们想的方式进行分词,比如我叫 李二狗,拆出来是李、二、狗,不会把我的名字作为关键词进行分词。ik有一个词典机制,就和输入法的词库类似,我们只需要将我们想要分成的词写成词典即可。

POST _analyze
{"analyzer": "ik_max_word","text":     "李二狗"
}
#结果
{"tokens" : [{"token" : "李","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "二","start_offset" : 1,"end_offset" : 2,"type" : "TYPE_CNUM","position" : 1},{"token" : "狗","start_offset" : 2,"end_offset" : 3,"type" : "CN_CHAR","position" : 2}]
}

IK 词典

首先进入到 解压的 IK 插件目录,进入 config 目录,elasticsearch-7.17.21\plugins\ik\config。

找到 IKAnalyzer.cfg.xml 文件,打开可以看见这里就是添加词典的地方

然后在 config 目录下新建一个词典,名字最好是中文,后缀是 .dic,然后在里面加上想要作为分词的词组。

再然后在刚刚的文件中把词典添加进去

重启 ES 和 kibana,测试,发现按照词典进行分词了。

篇幅有限,Java 整合 ES 在下一篇文章。

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

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

相关文章

二叉树的最小深度-力扣

使用DFS,在取左右子树的最小值时,需要注意,当左右子树只存在一个时,此时有一个返回值为0,此时不能用0作为最小深度,而是另一颗不为0的子树的最下深度,才是需要的值。 class Solution { public:…

UG怎么取消编程平面显示:深入解析与实用指南

UG怎么取消编程平面显示:深入解析与实用指南 UG(Unigraphics NX)作为一款功能强大的计算机辅助设计与制造软件,广泛应用于各种工业领域。在UG的编程和加工模块中,编程平面的显示对于操作至关重要。但有时,…

Python下载库

注:本文一律使用windows讲解。 一、使用cmd下载 先用快捷键win R打开"运行"窗口,如下图。 在输入框中输入cmd并按回车Enter或点确定键,随后会出现这个画面: 输入pip install 你想下载的库名,并按回车&…

贰[2],VisionMaster/.NetCore的WPF应用程序调用控件

1,环境 VisionMaster4.2 VisualStudio2022 WPF/.Net6.0 2,记录原因 .NetFrameWork的WPF应用程序调用添加例程.NetFrameWork的Winform应用程序相应的库,不会出现报错,界面也能正常显示操作,但是.NetCore的程序却总是…

阿里云发送国内短信怎样编程

1.准备&#xff1a;阿里云注册&#xff0c;新建用户并授权&#xff0c;获取appkey和secret&#xff0c;开通短信服务&#xff0c;申请资质签名模板&#xff0c;短信服务右下角openapi查看文档和下载实例&#xff0c;在线客服咨询遇到的问题 2.依赖引入&#xff1a; <depend…

JavaScript入门宝典:核心知识全攻略(下)

文章目录 前言一、获取标签元素二、操作标签元素属性1. 属性的操作2. innerHTML 三、数组及操作方法1. 数组的定义2. 数组的操作 四、循环语句五、字符串拼接六、定时器1. 定时器的使用3. 清除定时器 七、ajax1. ajax的介绍2. ajax的使用 前言 JavaScript是前端开发不可或缺的技…

Typescript 中 tsconfig.json 无法写入文件,因为它会覆盖输入文件

先来看看问题 在开发ts项目的时候&#xff0c;包错提示无法写入文件 tsconfig.json无法写入文件"url"因为它会覆盖输入文件 这是tsconfig.json文件配置问题&#xff0c;需要加入下面的配置就好了&#xff1a; {"compilerOptions": {"outDir": …

【MySQL数据库】:MySQL索引特性

目录 索引的概念 磁盘 磁盘的基本特征 MySQL与磁盘交互的基本单位 索引的理解 建立测试表 理解单个Page 理解多个Page 页目录 单页情况 多页情况 索引的数据结构 聚簇索引 VS 非聚簇索引 索引操作 创建主键索引 创建唯一索引 创建普通索引 创建全文索引 查询…

海宁代理记账公司-专业的会计服务

随着中国经济的飞速发展&#xff0c;企业的规模和数量日益扩大&#xff0c;在这个过程中&#xff0c;如何保证企业的财务活动合规、准确无误地进行&#xff0c;成为了每个企业面临的重要问题&#xff0c;专业、可靠的代理记账公司应运而生。 海宁代理记账公司的主要职责就是为各…

Prism 入门06,发布订阅(入门完结)

本章节介绍使用 Prism 框架的消息聚合器 IEventAggregator ,实现如何进行消息发布,订阅,取消订阅的功能 继续使用上一章节使用的 Prism WPF 空模板项目 BlankApp1 1.首先,在使用 Prism 框架当中,进行事件消息的发布和订阅之前,需要定义发布事件的事件消息模型。如下所示:…

如何手撸一个java缓存框架

创建一个简单的Java缓存框架涉及到多个方面&#xff0c;包括数据结构的选择、缓存策略的实现、线程安全的保证等。下面是一个简单的Java缓存框架的核心代码案例&#xff0c;它将展示如何实现一个基本的缓存机制。 首先&#xff0c;我们定义一个Cache接口&#xff0c;它包含缓存…

探索str Python用法:深入理解字符串操作的精髓

探索str Python用法&#xff1a;深入理解字符串操作的精髓 在Python的广袤天地中&#xff0c;str类型无疑占据着举足轻重的地位。它不仅是数据处理和信息交换的基石&#xff0c;更是我们与计算机世界沟通的桥梁。然而&#xff0c;str的用法远非表面所见那般简单&#xff0c;它…

端午节景区视频监控方案:智慧景区EasyCVR视频监控系统构建与运用

端午节&#xff0c;作为中国传统节日之一&#xff0c;每年吸引着大量游客前往各地景区参观游览&#xff0c;感受浓厚的文化氛围。然而&#xff0c;随着游客数量的增多&#xff0c;景区管理也面临着越来越多的挑战&#xff0c;其中安全问题尤为突出。因此&#xff0c;实施端午节…

顺序表、链表、栈和队列总结

目录 顺序表 链表 栈 队列 总结 补充 顺序表 实现 链表 实现 栈 实现 队列 实现 顺序表、链表、栈和队列都是线性数据结构&#xff0c;但它们在管理和访问数据方面有不同的特点和用途。以下是它们之间的主要区别&#xff1a; 顺序表 存储方式&#xff1a;在连续…

使用 ESPCN 模型进行超分辨率图像处理

前言 使用 ESPCN (Efficient Sub-Pixel CNN) 模型对低分辨率的图像&#xff0c;进行超分辨率处理。 效果展示 lowres 表示低分辨率图像&#xff0c;highres 表示高分辨率图像&#xff0c;prediction 表示模型预测的高分辨率图像&#xff0c;可以看出模型在生成高分辨率图像过…

力扣hot100:155. 最小栈(栈,辅助栈存储相关信息)

LeetCode&#xff1a;155. 最小栈 1、尝试单调栈 看到这题说&#xff0c;要常数时间内检索最小元素的栈&#xff0c;想到了单调栈&#xff0c;递增单调栈确实能维护最小值&#xff0c;但是这个最小值是存在一定意义的&#xff0c;即如果后面出现了最小值&#xff0c;那么前面…

光电管道液位传感器与电容式液位开关相比

如今&#xff0c;随着检测液位技术的不断发展&#xff0c;检测液位的方法也越来越多&#xff0c;比如浮球开关、电容式液位传感器、管道式液位传感器等等&#xff0c;那么光电管道液位传感器与电容式液位开关相比&#xff0c;有哪些优势&#xff1f; 光电管道液位传感器采用先…

论文高级图表绘制(Python语言,局部放大图)

本文将通过一个具体的示例,展示如何使用Python语言和Matplotlib库来绘制高级图表,包括局部放大图的制作。适用于多条曲线绘制在同一个图表中,但由于数据量过大,导致曲线的细节看不清,需要对细节进行局部放大。如下图: 环境准备 首先,确保你的Python环境中已经安装了以…

页面加载性能分析中,如何确定哪些资源是关键的,哪些可以延迟加载?

在页面加载性能分析中&#xff0c;确定哪些资源是关键的&#xff0c;哪些可以延迟加载&#xff0c;可以通过以下步骤进行&#xff1a; 使用 Performance 面板&#xff1a; 在 Chrome DevTools 的 Performance 面板中记录页面加载过程。分析记录结果&#xff0c;查看哪些资源加载…

基于SSM+Jsp的高校信息资源共享平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…