Elasticsearch从入门到精通

article/2025/10/24 9:49:51

1、Elasticsearch简介

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 
但是,Lucene只是一个库。想要发挥其强大的作用,你需使用Java并要将其集成到你的应用中。Lucene非常复杂,你需要深入的了解检索相关知识来理解它是如何工作的。 
Elasticsearch也是使用Java编写并使用Lucene来建立索引并实现搜索功能,但是它的目的是通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性。 
不过,Elasticsearch不仅仅是Lucene和全文搜索引擎,它还提供:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 实时分析的分布式搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

而且,所有的这些功能被集成到一台服务器,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。上手Elasticsearch非常简单,它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。 
随着知识的积累,你可以根据不同的问题领域定制Elasticsearch的高级特性,这一切都是可配置的,并且配置非常灵活

2、Elasticsearch在liunx系统安装

Elasticsearch和jdk的匹配

备注:Elasticsearch需要Java虚拟机的支持

 下载地址:

Download Elasticsearch | Elastic

查询jdk的版本

解压缩

[root@iZbp1gjon8qil2s26unji4Z elasticsearch]# tar -zxvf elasticsearch-6.8.12.tar.gz 

[root@iZbp1gjon8qil2s26unji4Z bin]# ./elasticsearch

 报错

org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.8.12.jar:6.8.12]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.8.12.jar:6.8.12]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.8.12.jar:6.8.12]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~

解决:

创建一个独立的用户,比如elk来启动elasticsearch,不用root用户启动

[root@iZbp1gjon8qil2s26unji4Z bin]# ./elasticsearch

[root@iZbp1gjon8qil2s26unji4Z elasticsearch]# adduser els
[root@iZbp1gjon8qil2s26unji4Z elasticsearch]# chown -R els:els  elasticsearch-6.8.12

[root@iZbp1gjon8qil2s26unji4Z elasticsearch]# su els
[els@iZbp1gjon8qil2s26unji4Z elasticsearch]$ cd elasticsearch-6.8.12/
启动

[els@iZbp1gjon8qil2s26unji4Z bin]$ nohup ./elasticsearch >/dev/null 2>&1 &
[els@iZbp1gjon8qil2s26unji4Z bin]$ ps -ef|grep elasticsearch

3、Elasticsearch的核心概念

全文搜索(Full-text Search)

  全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
  在全文搜索的世界中,存在着几个庞大的帝国,也就是主流工具,主要有:

  • Apache Lucene
  • Elasticsearch
  • Solr
  • Ferret

倒排索引(Inverted Index)

  该索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。Elasticsearch能够实现快速、高效的搜索功能,正是基于倒排索引原理。

节点 & 集群(Node & Cluster)

  Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例。单个Elasticsearch实例称为一个节点(Node),一组节点构成一个集群(Cluster)。

索引(Index)

  Elasticsearch 数据管理的顶层单位就叫做 Index(索引),相当于关系型数据库里的数据库的概念。另外,每个Index的名字必须是小写。

文档(Document)

  Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

类型(Type)

  Document 可以分组,比如employee这个 Index 里面,可以按部门分组,也可以按职级分组。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似关系型数据库中的数据表。
  不同的 Type 应该有相似的结构(Schema),性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

文档元数据(Document metadata)

  文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。

字段(Fields)

  每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
  在 Elasticsearch 中,文档(Document)归属于一种类型(Type),而这些类型存在于索引(Index)中,下图展示了Elasticsearch与传统关系型数据库的类比:

4、Elasticsearch架构图与介绍

Gateway代表ElasticSearch索引的持久化存储方式。在Gateway中,ElasticSearch默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。当ES集群关闭或重启的时候,它就会从Gateway里去读取索引数据。比如LocalFileSystem和HDFS、AS3等。

DistributedLucene Directory,它是Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。River,代表是数据源。是以插件的形式存在于ElasticSearch中。 

Mapping,映射的意思,非常类似于静态语言中的数据类型。比如我们声明一个int类型的变量,那以后这个变量只能存储int类型的数据。比如我们声明一个double类型的mapping字段,则只能存储double类型的数据。Mapping不仅是告诉ElasticSearch,哪个字段是哪种类型。还能告诉ElasticSearch如何来索引数据,以及数据是否被索引到等。

Index Moudle,Elasticsearch里的索引概念是名词而不是动词,在elasticsearch里它支持多个索引。优点类似于关系数据库里面每一个服务器可以支持多个数据库是一个道理,在每一索引下面又可以支持多种类型,这又类似于关系数据库里面的一个数据库可以有多张表一样。但是本质上和关系数据库还是有很大的区别,我们这里暂时可以这么理解Search Module,搜索查询模块。Disvcovery,主要是负责集群的master节点发现。比如某个节点突然离开或进来的情况,进行一个分片重新分片等。这里有个发现机制。发现机制默认的实现方式是单播和多播的形式,即Zen,同时也支持点对点的实现。另外一种是以插件的形式,即EC2。

Scripting,即脚本语言。包括很多,这里不多赘述。如mvel、js、python等。Transport,代表ElasticSearch内部节点,代表跟集群的客户端交互。包括Thrift、Memcached、Http等协议RESTful Style API,通过RESTful方式来实现API编程。3rd plugins,代表第三方插件。Java(Netty),是开发框架。JMX,是监控。


http://chatgpt.dhexx.cn/article/6J5Xvw40.shtml

相关文章

Scala 从入门到精通

Scala 从入门到精通 scala风格与java风格 public class JavaDemo01 {public static void main(String[] args) {System.out.println("我爱你中国");} }object ScalaDemo01 {def main(args: Array[String]): Unit {println("我爱你中国")} }javac JavaDe…

尚硅谷Redis6从入门到精通

本博客为尚硅谷课程笔记,课程来源:【尚硅谷】Redis 6 入门到精通 超详细 教程_哔哩哔哩_bilibili 本博客参考内容: https://blog.csdn.net/weixin_47872288/article/details/118410080 https://zhangc233.github.io/2021/05/02/Redis/#Hyper…

Maven从入门到精通

文章目录 企业级架构框架图 Maven 项目构建工具概述为何需要maven? 四大特征仓库 repository依赖 dependency坐标 coordinate命令 mvn cmd小结 安装官网安装 配置 settings.xml配置文件设置镜像仓库改变仓库位置 eclipse 集成 maven配置 eclipse创建Maven项目创建ma…

PS从入门到精通第4节——祖传抠图技法

本结内容: 文末有本节内容总结 练习作业:素材包已上传,可免费下载,文末有练习的具体做法 背景素材直接打开为背景 本章知识重点在于对PS不同抠图工具的学习和使用选择合适的抠图工具去进行作业的制作抠图物体边缘无黑边排版比例大…

Docker从入门到精通

目录 一、初识 Docker 1、Docker概念 2、安装Docker(CentOS系统) 3、Docker的架构 4、阿里云镜像加速 5、Docker容器虚拟化 与 传统虚拟机比较 二、Docker 服务相关命令 1、启动docker 服务: 2、停止docker 服务: 3、重…

Midjourney从入门到精通

前言 什么是AI绘画 AI 绘画,顾名思义就是利用人工智能进行绘画,是人工智能生成内容(AIGC)的一个应用场景。其主要原理就是收集大量已有作品数据,通过算法对它们进行解析,最后再生成新作品,而算…

Jenkins从入门到精通

Jenkins从入门到精通 Jenkins简介Jenkins的特征Jenkins安装和持续集成环境配置Gitlab代码托管服务器安装Gitlab安装Gitlab添加组、创建用户、创建项目持续集成环境(1)-Jenkins安装持续集成环境(2)-Jenkins插件管理持续集成环境(3)-Jenkins用户权限管理持续集成环境(4)-Jenkins凭…

PS从入门到精通第2节——揭开PS的神秘面纱

本节内容 博客底部有内容小结(本届内容快捷键) 课后练习:(素材包已上传,可免费下载) 下面开始今天的课程 新建画布后拖拽素材进入 1. 勾选自动选择后可随意选择画布中的素材拖动 2. CTRLT调出定界框 …

PS从入门到精通

系列教程分为三个阶段 A功能精通阶段目录 红色是比较重要的课程,除了1和14节没有练习素材,其他部分都上传了案例相关的素材和高清笔记 第1节 用双手成就你的梦想 本节内容 关于版本 软件安装包可以搜索以下微信公众号或者官网下载,附件 …

UI自动化中断言的使用

在自动化编写脚本时,需要通过断言的方法来判断测试用例是否执行成功。检查点有两个,第一个是页面级别的检查,包括网页的标题和网址,第二个是页面元素级别的检查,包括元素的文本和元素的某个属性。 例子,下面…

UI自动化

UI自动化 本地搭建Javall商城项目maven环境搭建Maven项目管理Maven仓库 TestNG 单元测试框架安装testNG插件 八大定位方式知识点隐式等待:显式等待:iframe切换:window切换:Select下拉框Radio Button(单选按钮&#xff…

UI自动化平台(一)

前言:最近萌生了做UI自动化平台的想法,以前做UI自动化都是直接脚本化的,也一直觉得UI改动一般都是很频繁,所以慢慢的脚本化的工作都放弃了,但是目前在公司,发现还是有点用的,公司的前辈也一直在…

ui自动化设计思路

小伙伴让我周末做技术分享,想着这是一件有意义的事情,便答应了下来,那就给大家讲讲ui自动化吧。这里会结合具体的代码给大家讲ui自动化一些理念,方案设计。 本文将探讨ui自动化设计思路,主要围绕以下方面展开讲解&…

使用UI Automation库用于UI自动化测试

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! UI A…

你知道什么叫三目表达式吗

目录 什么是三目表达式? 运用 1.单个使用 2.嵌套使用 什么是三目表达式? 1.三目表达式是一种编程中常见的表达式,它能够有效地帮助我们解决一些问题。 2.三目表达式由三个部分组成,分别是:条件表达式、结果表达式 听不懂么,那我们就来举个…

使用UI Automation实现自动化测试 --工具使用

当前项目进行三个多月了,好久也没有写日志了;空下点时间,补写下N久没写的日志 介绍下两个工具 我本人正常使用的UISpy.exe工具和inspect.exe工具 这是UISPY工具使用的图,正常使用到的几个属性 这里重点说一下微软件的UI Autom…

自动化测试平台(十):UI自动化元素页面的管理功能实现

一、前言 上一章我们完成了列表组件公共化封装和项目管理功能的实现,这一章将实现UI元素及元素页面的管理功能,换句话说就是对selenium执行定位操作的元素进行管理。 完整教程地址:《从0搭建自动化测试平台》 项目在线演示地址:http://121.43.43.59/ (帐号:admin 密码…

Android自动化测试入门(二)UI Automator

UI Automator是一个界面测试框架,支持跨进程,几乎可以模拟所有的人工操作。需要运行在4.3或者更高的系统版本上。它的测试代码的编写不依赖于目标应用的内部实现细节,非常适用编写黑盒自动化测试。 UI Automator 测试框架的主要功能包括&…

03-vue基础-插值表达式

文章目录 vue插值表达式vue通过data提供数据通过插值表达式显示数据安装vue开发者工具总结 vue插值表达式 本文要讲解的内容如下: 通过data提供数据通过插值表达式显示数据vue开发者工具的安装与使用 vue通过data提供数据 vue中通过template可以提供模板&#xf…

接口自动化和UI自动化:定义、区别及示例代码

目录 1.接口自动化 2.UI自动化 3.接口自动化和UI自动化的区别 4.结论 5.总结 在软件测试领域中,接口自动化和UI自动化是两个常见的测试类型,它们分别用于测试应用程序的不同层面。本文将介绍接口自动化和UI自动化的基本定义、区别以及示例代码。 1…