ElasticSearch7.6.x 学习笔记

这篇具有很好参考价值的文章主要介绍了ElasticSearch7.6.x 学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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性能对比

ElasticSearch7.6.x 学习笔记

ElasticSearch7.6.x 学习笔记

ElasticSearch7.6.x 学习笔记
ElasticSearch7.6.x 学习笔记

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不仅仅适用于日志分析,它还可以支持其他任何数据分析和收集的场景,日志分析和收集只是更具有代表性,并非唯一性。

ElasticSearch7.6.x 学习笔记



ES核心概念

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

文档

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

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

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



类型

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

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

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



索引

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

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

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

下图是一个有3个节点的集群:
ElasticSearch7.6.x 学习笔记

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

倒排索引

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

  • 示例一:
    例如,现在有两个文档,每个文档包含如下内容:
    ElasticSearch7.6.x 学习笔记

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

    ElasticSearch7.6.x 学习笔记

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

  • 示例二:

    下图是4个文档数据。
    ElasticSearch7.6.x 学习笔记
    elasticsearch会自动为文档创建倒排索引列表,如下图:
    ElasticSearch7.6.x 学习笔记
    如果要搜索含有linux标签的数据,那么根据倒排索引列表,只需要从文档3和文档4中查询即可,完全过滤掉无关的所有数据,效率会提升很多。

elasticsearch的索引和Lucene的索引对比

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

环境准备

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

Rest风格操作

Rest请求

ES 7.x

method url 描述
PUT localhost:9200/索引/类型/文档id 创建文档(指定文档id)
POST localhost:9200/索引/类型 随机文档(随机文档id)
POST localhost:9200/索引/类型/文档id/_update 修改文档
DELETE localhost:9200/索引/类型/文档id 删除文档
GET localhost:9200/索引/类型/文档id 通过文档id查询文档
POST localhost: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当前信息)
    ElasticSearch7.6.x 学习笔记

复杂查询demo

例子一

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

ElasticSearch7.6.x 学习笔记

返回结果解析:
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
}

ElasticSearch7.6.x 学习笔记

例子三

布尔值查询

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
          }
        }}
      ]
    }
  }
}

ElasticSearch7.6.x 学习笔记

高亮查询

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

ElasticSearch7.6.x 学习笔记

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

ElasticSearch7.6.x 学习笔记

其他文章来源地址https://www.toymoban.com/news/detail-415365.html

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

到了这里,关于ElasticSearch7.6.x 学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch7.3学习(十八)----多索引搜索

    1、multi-index 多索引搜索 多索引搜索就是一次性搜索多个index下的数据 应用场景:生产环境log索引可以按照日期分开。 2、_all metadata的原理和作用 直接可以搜索所有的field,任意一个field包含指定的就可以搜索出来。我们在进行中搜索的时候,难道是对document中的每一个

    2024年02月11日
    浏览(38)
  • Elasticsearch基础篇(四):Elasticsearch7.x的官方文档学习(Set up Elasticsearch)

    You should rarely need to change Java Virtual Machine (JVM) options. If you do, the most likely change is setting the heap size. 通常情况下,您应该很少需要更改Java虚拟机(JVM)选项。如果需要更改,最常见的更改是设置堆大小。 The remainder of this document explains in detail how to set JVM options. You can set options

    2024年02月08日
    浏览(39)
  • ElasticSearch 学习9 spring-boot ,elasticsearch7.16.1实现中文拼音分词搜索

    一、elasticsearch官网下载:Elasticsearch 7.16.1 | Elastic 二、拼音、ik、繁简体转换插件安装 ik分词:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary. 拼音分词:GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is

    2024年01月22日
    浏览(51)
  • ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析

    场景:数据库中按照某个字段排序,sql只需写order by 字段名即可,如果es对一个 text field 进行排序,es中无法排序。因为文档入倒排索引表时,分词存入,es无法知道此字段的真实值。这样的结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。 通常有两

    2024年02月08日
    浏览(44)
  • ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建、删除、是否存在、关闭、开启

    注意:导入的包区别,不同的包创建索引的方式不同。博主亲身实践,具体体现在createIndexRequest.mapping()里面。读者可自行试验。  由此可以猜想一下: 可以看到上述两种方式导入的包的子类名是相同的,但是具体对索引的操作方式可能是不同的。具体的区别博主暂时还不清

    2024年02月16日
    浏览(58)
  • Docker安装ElasticSearch7.14.0 docker安装elasticsearch7.14.0完整详细教程

    Docker常用命令大全 Docker ElasticSearch 官方仓库 我这边选择的版本是 7.14.0 ,这个版本比较安全可靠,在终端中执行以下命令以拉取 docker pull elasticsearch:7.14.0 使用以下命令创建一个新的 rabbitmq容器并将其启动: --name 是 容器别名 将 宿主机 9200 端口映射到 容器内 9200 and 端口 93

    2024年02月13日
    浏览(43)
  • 【elasticsearch】elasticsearch7.x集群搭建

    目录 一、服务器情况 二、安装前准备 1、下载es 2、配置服务器免密登录 3、升级jdk 三、安装es集群 (一)master服务器的操作 1、将es上传到Linux并解压 2、创建数据、日志存储文件夹 3、配置config/elasticsearch.yml 4、配置jvm 5、创建es用户 6、赋权限 7、修改配置文件 8、启动服务 9、启

    2023年04月09日
    浏览(48)
  • centos安装elasticsearch7.9

    下载地址如下,版本号可以替换成自己想要的。 这里需要注意一点,需要根据你服务器的内核来进行选择,如下图所示,我就应该选择aarch64版本的,否则运行的时候会报错cannot execute binary file: Exec format error https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-linux-aarch64.

    2024年02月12日
    浏览(43)
  • elasticsearch7.8.0集群搭建

    名称 地址 ElasticSearch7.8 https://mirrors.huaweicloud.com/home(华为开源镜像站) Logstash7.8 https://mirrors.huaweicloud.com/home(华为开源镜像站) Kibana7.8 https://mirrors.huaweicloud.com/home(华为开源镜像站 jdk1.8 https://www.oracle.com/java 自行安装jdk及配置环境变量 解压 创建数据存放地址和日志存放地

    2024年02月02日
    浏览(52)
  • Elasticsearch7.8.0版本入门——Elasticsearch7.8.0版本和Kibana7.8.0版本的下载、安装(win10环境)

    1.1、官网下载地址 Elasticsearch下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 1.2、下载步骤 进入下载页面,选择需要下载的【版本】,如下图: 下载对应系统环境的版本,如下图: 1.3、安装步骤( 需要jdk11及以上版本支持 ) Windows 版的 Elasticsearch 的安装很简单,解

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包