ElasticSearch7.6.x 学习笔记

news2024/11/27 2:41:56

ElasticSearch7.6.x 学习笔记

目录



ElasticSearch概述

ElasticSearch,简称es,es是一个开源高扩展分布式全文检索引擎,它可以近乎实时的存储、检索数据。且本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用java开发并使用Lucene作为核心来实现所用索引和搜索的功能。但是,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已经超过了Solr等,成为排名第一的搜索引擎类应用。


为什么要选择ElasticSearch

  • SQL:like %% 做模糊查询,如果是大数据,效率慢。 (通过增加索引解决)
  • ElasticSearch/Solr: 全文检索

总而言之:ElasticSearch是作为大数据全文检索的一种优质选型。


Lucene

  • Lucene是一套信息检索工具包!jar包!不包含搜索引擎,包含的:索引结构、读写索引工具、排序、搜索规则…工具类
  • Lucene在java开发环境里是一个成熟的免费开源工具,就其本身而言,Lucene是当前以及最近几年最受欢迎的免费java信息检索程序库。


对比ElasticSearch与Solr

  • ElasticSearch: ElasticSearch是一个基于Apache Lucene™的开源搜索引擎。使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能。通过使用RESTful API来隐藏Lucene的复杂性。
  • Solr:Solr是Apache下的一个顶级开源项目,采用java开发,基于Lucene的全文搜索服务器。
    • 使用POST方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据xml文档添加、删除、更新索引。Solr搜索只需要发送GET请求,然后对Solr返回的xml、json等格式的查询结果进行解析。
    • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口

ElasticSearch与Solr性能对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

ElasticSearch vs Solr 总结

  • es基本是开箱即用,Solr安装较为复杂
  • Solr利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调治理功能。
  • Solr支持更多格式数据,而ElasticSearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑。
  • Solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
    • ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
    • Solr是传统搜索应用的有力解决方案,但ElasticSearch更适用于新兴的实时搜索应用。
  • Solr比较成熟,有一个更大、更成熟的用户、开发和贡献者社区,而ElasticSearch相对开发维护者较少,更新太快,学习使用成本较高。



了解ELK

ELK是ElasticSearch、Logstash、Kibana三大开源框架的缩写。市面上也被称为Elastic Stack。
其中:

  • ElasticSearch是一个基于Lucene、分布式、通过RESTful方式进行交互的近实时搜索平台框架。
  • Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
  • Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。

市场上很多开发只要提到ELK能够一致说出它是一个日志分析架构技术栈的总称,但实际上ELK不仅仅适用于日志分析,它还可以支持其他任何数据分析和收集的场景,日志分析和收集只是更具有代表性,并非唯一性。

在这里插入图片描述



ES核心概念

  • 集群,节点,索引,类型(8.x废弃),文档,分片,映射
  • elasticsearch 是面向文档的,elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中有包含多个字段(列),elasticsearch中一切都是JSON
  • 关系型数据库与elasticsearch 对比
    在这里插入图片描述
  • 物理设计:
    elasticsearch在后台把每个索引划分成多个分片,每片分片可以在集群中的不同服务器间迁移。
  • 逻辑设计:
    一个索引类型中,包含多个文档,当我们索引一片文档时,可以通过这样的一个顺序找到它: 索引 >> 类型 >> 文档ID,通过这个组合我们就能索引到某个具体的文档。 (ID不必是整数,实际上它是个字符串)

文档

elasticsearch是面向文档的,所以索引和搜索数据的最小单位是文档,在elasticsearch中,文档有几个重要属性:

  • 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value
  • 可以是层次型,一个文档中包含子文档,复杂的逻辑实体就是这么来的
  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态添加一个新的字段。

尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字符串也可以是整形。因为elasticsearch会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在elasticsearch中,类型有时候也称为映射类型。



类型

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称为映射。我们说文档是无模式的,它们不需要拥有映射中所定义的所有字段。

比如新增一个字段,那么elasticsearch是怎么做的呢?

elasticsearch会自动将新字段加入映射,但是这个字段的不确定它是什么类型,elasticsearch就开始推测,如果这个值是18,那么elasticsearch会认为它是整形。但是elasticsearch也可能推测的不对, 所以最安全的方式就是提前定义好所需要的映射,这点和关系型数据库殊途同归了,先定义好字段,然后再使用。



索引

索引就可以理解为关系型数据库的库。索引是映射类型的容器,elasticsearch中的索引是一个非常大的文档集合。索引存储了映射类型的字段和其他设置。然后他们被存储到了各个分片上。

物理设计:节点和分片如何工作

一个集群至少有一个节点,而一个节点就是一个elasticsearch进程,节点可以有多个索引默认的,如果创建索引,那么索引将会有5个分片(primary shard,又称主分片)构成的,每个主分片会有一个副本(replica shard,又称复制分片)

下图是一个有3个节点的集群:
在这里插入图片描述

可以看到主分片和对应的复制分片都不会再同一个节点内,这样就有利于某个节点挂掉了,数据也不至于丢失。实际上,一个分片是一个Lucene索引,一个包含 倒排索引 的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

倒排索引

elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索引作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含他的文档列表。

  • 示例一:
    例如,现在有两个文档,每个文档包含如下内容:
    在这里插入图片描述

    为了创建倒排索引,我们首先要将每个文档拆分成独立的词(或称为词条或者tokens),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在哪个文档:

    在这里插入图片描述

    假设现在我们试图搜索 to forever, 只需要查看包含每个词条的文档,forever在doc1和doc2中都存在,to在doc1中存在、doc2中不存在,所以在doc1中匹配度更高,权重(score)也就更高。

  • 示例二:

    下图是4个文档数据。
    在这里插入图片描述
    elasticsearch会自动为文档创建倒排索引列表,如下图:
    在这里插入图片描述
    如果要搜索含有linux标签的数据,那么根据倒排索引列表,只需要从文档3和文档4中查询即可,完全过滤掉无关的所有数据,效率会提升很多。

elasticsearch的索引和Lucene的索引对比

在elasticsearch中,索引这个词被频繁使用。在elasticsearch中,索引被分为多个分片,每份分片是一个Lucene索引4。所以一个elasticsearch索引是由多个Lucene索引组成的。

环境准备

  • ElasticSearch
  • ElasticSearch head
  • IK分词器
  • Kibana控制台

Rest风格操作

Rest请求

ES 7.x

methodurl描述
PUTlocalhost:9200/索引/类型/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引/类型随机文档(随机文档id)
POSTlocalhost:9200/索引/类型/文档id/_update修改文档
DELETElocalhost:9200/索引/类型/文档id删除文档
GETlocalhost:9200/索引/类型/文档id通过文档id查询文档
POSTlocalhost:9200//索引/类型/_search查询所有数据

注:

  • 8.x之后由于type被弃用,有许多请求的修改
    8.x URL修改:
    • PUT: localhost:9200/索引/_doc/文档id
    • POST: localhost:9200/索引/_update/文档id



数据类型

  • 字符串类型
    text 、 keyword
  • 数值类型
    long 、integer 、short 、 byte 、 double 、 float 、 half float 、 scaled float
  • 日期类型
    date
  • 布尔类型
    boolean
  • 二进制类型
    binary
  • 等等

关于text与keyword
text类型会被分词器解析,keyword类型不会被分词器解析



指定字段的类型

// 创建索引规则,指定字段类型
PUT /test2
{
	"mappings": {
		"properties":{
			"name": {
				"type": "text"
			},
			"age": {
				"type": "integer"
			}
		}
	}
}

如果文档没有指定类型,es会给配置默认的字段类型



扩展

  • GET _cat/indices?v (通过_cat命令可以获得很多es当前信息)
    在这里插入图片描述

复杂查询demo

例子一

GET /test/_search
{
	"query":{
		//精确匹配
		"match": {
			"name": "人民"
		}
	}
}

在这里插入图片描述

返回结果解析:
1. hits:{...}     -- 索引和文档的信息
2. hits.total.value   -- 查询出的数量
3. hits.total.relation  -- 查询关系
	1. eq : 相等
4. hits.max_score  -- 查询结果最大匹配分数
5. hits: [...]   -- 查询结果具体信息
	1. _index   -- 索引
	2. _id  -- 文档id
	3. _score -- 匹配分数
	4. _source -- 数据

例子二

GET /test2/_search
{
  "query": {
    "match": {
      "name": "人民"
    }
  },
  //只获取指定字段
  "_source": ["age"],
  //排序
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  //分页
  "from": 0,
  "size": 1
}

在这里插入图片描述

例子三

布尔值查询

GET /test2/_search
{
  "query": {
  	//布尔值多条件查询
    "bool": {
      // must相当于and ,should相当于or , must_not相当于not
      "must": [
        {
          "match": {
            "name": "人民"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ],
      //附加过滤条件
      "filter": [
        {
          "range": {
            "age": {
              // gte 大于等于 , gt 大于
              "gte": 10,
              // lte 小于等于 , lt 小于
              "lte": 20
          }
        }}
      ]
    }
  }
}

在这里插入图片描述

高亮查询

GET /test2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "人民"
          }
        }
      ]
    }
  },
  //高亮
  "highlight": {
    "fields": {
      // 高亮字段
      "name": {}
    }
  }
}

在这里插入图片描述

GET /test2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "人民"
          }
        }
      ]
    }
  },
  "highlight": {
  	// 自定义标签前缀
    "pre_tags": "<span class='key' style='color:red'>",
    // 自定义标签后缀
    "post_tags": "</span>", 
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

其他

  • 精确查找: term查询是直接通过倒排索引指定的词条进行精确查询的。
  • 关于分词:
    • term:直接精确查询
    • match:会使用分词器解析 (先分析文档,然后再通过分析的文档进行查询)

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

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

相关文章

Spring事务、事务隔离级别、事务传播机制

Spring事务和事务传播机制一、为什么需要事务&#xff1f;(回顾)二、Spring中事务的实现2.1 MySQL中的事务使用 (回顾)2.2 Spring编程式事务2.3 Spring 声明式事务2.3.1 Transactional 使用2.3.2 Transactional 作用范围2.3.3 Transactional 参数说明2.3.4 注意事项2.3.4 Trans…

【微服务】Nacos注册中心

Nacos和Eureka一样也可以充当服务的注册中心&#xff0c;让我们一起看看有何区别&#xff1f; 点击跳转&#x1f449;【微服务】Eureka注册中心 一.引入 Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比于Eureka其功能更加丰富&#xff0c;在国内受欢迎…

2. 获取数字证书,搭建nginx服务器,验证https请求

文章目录 一、 前提知识二、获取数字证书三、搭建nginx服务器3.1 安装nginx操作步骤3.2 导入证书3.3 修改nginx配置文件四、验证一、 前提知识 首先我们知道访问域名时,http请求默认端口为80,https为443。那么我们现在就需要对这两个端口进行监听,这里我们就要用到nginx服务…

数据结构 最短路径课设(源码+实验报告+视频讲解)(用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 算法与数据结构 专 业&#xff1a; 班 级&#xff1a; 姓 名&#xff1a; 学 号&#xff1a; 实验学时&#xff1a; 指导…

插入排序实现

场景&#xff1a; 插入排序&#xff0c;一般也被称为直接插入排序。 对于少量元素的排序&#xff0c;它是一个有效的算法 。 插入排序是一种最简单的排序方法&#xff0c;它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表。在…

分享135个ASP源码,总有一款适合您

ASP源码 分享135个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 135个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1rHFniMK56P-_qXNY9kKihg?pwdl95g 提取码&#x…

day11文件夹导航条+文件从数据库和cos删除

获取临时凭证&&上传文件 1创建COS_OBJECT对象 new一个&#xff0c;然后就会向你写的url地址获取临时凭证&#xff08;需要引入一个JS&#xff09; 2.写url地址和url的函数&#xff0c;后台写函数获取到临时凭证&#xff0c;有文档直接调用就可&#xff0c;然后后台返回…

【C++】右值引用和移动语义 | 新的类功能 | 可变参数模板

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;左值引用…

HTTPS 是这样握手的

HTTP协议默认是明文传输&#xff0c;存在一定的安全隐患&#xff0c;容易被中间人窃听和攻击&#xff0c;在 加密解决HTTP协议带来的安全问题 中提到使用哈希、对称加密、非对称加密等方式对数据加密&#xff0c;能解决数据安全的问题。 以上加密方式需要我们手动的使用加密算…

python基础——列表切片操作

python基础——列表切片操作 文章目录python基础——列表切片操作一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤一、实验目的 掌握列表切片操作 二、实验原理 1、列表是写在方括号[]之间、用逗号分隔开的元素列表。列表可以完成大多数集合类的数据结构实现…

23种设计模式(二十三)——解释器模式【邻域问题】

文章目录 意图什么时候使用解释器真实世界类比解释器模式的实现文法抽象语法树解释器模式的优缺点亦称:Interpreter 意图 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 在软件系统中,如果有一些特殊的领域问题较为复杂,疑…

基于springboot物资管理系统源码含论文

摘要 目前&#xff0c;大型物资作为社会零售业态中最为重要的组成部分&#xff0c;处于社会零售商业 进入高速发展的轨道阶段&#xff0c;其在社会经济发展的作用日益明显。国内各大大型基本 上都拥有自己的社会网&#xff0c;将社会物资管理纳入网络管理系统&#xff0c;实现…

JDK8 新特性之并行的Stream流

目录 一&#xff1a;串行的Stream流 二&#xff1a;并行的Stream流 获取并行Stream流的两种方式 小结 三&#xff1a;并行和串行Stream流的效率对比 四&#xff1a;parallelStream线程安全问题 五&#xff1a;parallelStream背后的技术 Fork/Join框架介绍 Fork/Join原理…

RK3399平台开发系列讲解(内存篇)访问虚拟内存的物理内存过程

🚀返回专栏总目录 文章目录 一、虚拟地址的表示二、虚拟地址到物理地址的转换三、Linux页表沉淀、分享、成长,让自己和他人都能有所收获!😄 📢虚拟内存这一概念给进程带来错觉,使它认为内存大到几乎无限,有时甚至超过系统的实际内存。每次访问内存位置时,由CPU完成从…

static_cast,dynamic_cast,const_cast详解

目录 一.static_cast&#xff08;静态转换&#xff09; 二.dynamic_cast&#xff08;动态转换&#xff09; 三.const_cast 一.static_cast&#xff08;静态转换&#xff09; 1.语法&#xff1a; static_cast<new_type>(expression); newtype dataname static_cast…

分享133个ASP源码,总有一款适合您

ASP源码 分享133个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 133个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1l_8UHQkosNF3HHTu8AFq5A?pwdyxvw 提取码&#x…

欧几里得与扩展欧几里得算法(含推导过程及代码)

文章目录前言一、欧几里得算法二、扩展欧几里得算法2.1、认识裴蜀定理2.2、推导axbygcd(a, b)得到x与y2.2.1、推导过程2.2.2、代码实现2.3、推导axbygcd(a, b)的所有解及a或者b的最小值&#xff08;结论验证&#xff09;参考文章前言 在学习Acwing c蓝桥杯辅导课第八讲数论-Ac…

Spark 常用算子02

常用Action算子 1、countByKey算子 功能&#xff1a;统计key出现的次数&#xff08;一般适用于KV型的RDD&#xff09; 用法&#xff1a; result rdd1.countByKey() print(result)代码示例&#xff1a; # coding:utf8from pyspark import SparkConf, SparkContextif __name…

破解五角大楼3.0漏洞赏金计划专注于设施控制系统

国防部正在计划其“黑掉五角大楼”计划的第三次迭代&#xff0c;重点是找出维持标志性建筑和地面运行的操作技术中的漏洞。 国防部于 2016 年启动了黑客入侵五角大楼计划&#xff0c;供应商 HackerOne 协调了该部门公共网站上的漏洞赏金计划。 超过 1,400 名黑客参加了第一轮…

绝对空前!!!互联网史上的最大ddos攻击惊艳登场

美国遭遇史上最大黑客攻击&#xff0c;知名网站全部瘫痪。全世界一半的网络被黑客攻陷&#xff0c;大网站无一幸免。就在&#xff08;10月22日&#xff09;&#xff0c;美国早上我们见证了互联网建立以来的最大ddos攻击&#xff0c;twitter、netflix、paypal、reddit、pinteres…