前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch数据库

Elasticsearch数据库

作者头像
全栈程序员站长
发布2022-07-02 10:35:27
4640
发布2022-07-02 10:35:27
举报

大家好,又见面了,我是你们的朋友全栈君。

1、什么是Elasticsearch

1、概念以及特点

1、Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库。是一个接近实时的搜索平台,从索引这个文档到这个文档能够被搜索到只有一个轻微的延迟,企业应用定位:采用Restful API标准的可扩展和高可用的实时数据分析的全文搜索工具。

2、可拓展:支持一主多从且扩容简易,只要cluster.name一致且在同一个网络中就能自动加入当前集群;本身就是开源软件,也支持很多开源的第三方插件。

3、高可用:在一个集群的多个节点中进行分布式存储,索引支持shards和复制,即使部分节点down掉,也能自动进行数据恢复和主从切换。

3、采用RestfulAPI标准:通过http接口使用JSON格式进行操作数据。

4、数据存储的最小单位是文档,本质上是一个JSON 文本:

Elasticsearch数据库
Elasticsearch数据库

2、项目中为何使用(主搜索次分析再存储)

2.1、搜索引擎

实际项目开发中,几乎每个系统都会有一个搜索的功能,数据量少时可以直接从主数据库中比如Mysql搜索,但当搜索做到一定程度时,比如系统数据量上了10亿、100亿条的时候,传统的关系型数据库的I/O性能和统计分析性能就难以满足用户需要了。所以很多公司都会把搜索单独做成一个独立的模块,用ElasticSearch等来实现。虽然内存缓存数据库的读写性能很高,但完全把数据放在内存中是不太现实的,比如到PB级别的数据,按照每个节点96G内存计算,在内存完全装满的数据情况下,需要的机器是:1PB=1024T=1048576G ,节点数就是1048576/96=10922个 ,再考虑到数据备份,节点数还需要翻倍,成本巨大决定了其不现实!

Elasticsearch数据库
Elasticsearch数据库

2.2、日志分析

Elasticsearch+ Logstash + Kibana是同一家公司开发的3个开源工具,可组合起来搭建海量日志分析平台,目前很多公司都在使用这种方式搭建日志分析平台进行大数据分析。

Elasticsearch数据库
Elasticsearch数据库

3、底层架构

Elasticsearch数据库
Elasticsearch数据库

4、使用状况以及与其他搜索引擎的对比

2013年初,GitHub抛弃了Solr,采取ElasticSearch来做PB级的搜索,包括13亿文件和1300亿行代码”。

百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。

Elasticsearch数据库
Elasticsearch数据库

2、RESTFul 介绍

1、什么是RESTFul

REST(RepresentationalState Transfer)是一种软件架构的设计风格(不是标准),通过 HTTP接口处理数据,主要用于客户端和服务器的数据交互。该风格的具体特点——在服务器端,应用程序对象、数据库记录、算法、文本、图片等都是一个实体资源,使用 URI标识,所有资源都共享统一的接口(标准的HTTP方法)比如 GET、PUT、POSTDELETE,在客户端和服务器之间传输数据。

Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库

2、CURL命令的讲解

2.1、什么是CURL

本质就是以命令方式发送HTTP请求,可以完成比如发送表单信息、文件上传、分段下载、模拟登录等,理论上在APP或Web里能操作的通过此指令都能操作。

Elasticsearch数据库
Elasticsearch数据库

2.2、具体应用

Elasticsearch数据库
Elasticsearch数据库

3、Elasticsearch API文档查看

Elasticsearch数据库
Elasticsearch数据库

3、Elasticsearch及相关插件的安装

1、安装Elasticsearch并启动服务

Elasticsearch数据库
Elasticsearch数据库

2、安装第三方插件

Elasticsearch数据库
Elasticsearch数据库

2.1、Head插件

是Elasticsearch的一个集群管理工具,可以通过它来查看和搜索ES的数据,是完全由html5编写的独立网页程序。

Elasticsearch数据库
Elasticsearch数据库

2.2、Bigdesk插件

是Elasticsearch的一个集群监控工具,可以通过它来查看ES集群的各种状况,如cpu、内存使用情况、索引数据、搜索情况、http连接数等。

Elasticsearch数据库
Elasticsearch数据库

2.3、Mavel插件

Elasticsearch数据库
Elasticsearch数据库

4、倒排索引(ES具体是怎么搜索的)

1、倒排索引和正向索引

在全文搜索里,文档数据离不开搜索,而搜索离不开索引(没有索引搜索会很低效),倒排索引(Inverted index)是全文搜索系统里最高效的索引方法和数据结构,ES的索引就是倒排索引。也称反向索引/置入索引或反向档案,用以存储一个映射:在全文搜索下某个单词在一个文档或者一组文档中的位置。

Elasticsearch数据库
Elasticsearch数据库

2、倒排索引建立索引的具体方式

始、确定需求

在这5份文档中根据关键字“乔布斯”搜索匹配的文档,附属要求:文档的排序,这个搜索关键字在每个匹配文档中出现的位置和次数。

Elasticsearch数据库
Elasticsearch数据库

1、把文档进行分词(怎么分要看实际需求)

Elasticsearch数据库
Elasticsearch数据库

2、得到单词集合和文档集合(使用ID标记)

Elasticsearch数据库
Elasticsearch数据库

3、根据上面俩集合得到这个矩阵/数据结构

Elasticsearch数据库
Elasticsearch数据库

4、根据上表建立索引

Elasticsearch数据库
Elasticsearch数据库

终、实现需求了

Elasticsearch数据库
Elasticsearch数据库

5、ES的CURD操作

1、ES的API(本次在Mevel里演示,等同head和curl)

1.1、操作索引的API

Elasticsearch数据库
Elasticsearch数据库

1.2、操作类型的API

Elasticsearch数据库
Elasticsearch数据库

1.3、操作文档的API(每次仅能操作一个文档)

Elasticsearch数据库
Elasticsearch数据库

2、ES的内置字段以及字段的类型

Elasticsearch数据库
Elasticsearch数据库

6、批量操作文档

上节介绍的关于《操作文档的API》都只能对单个文档进行增删改查,mget用于批量检索多个文档,bulk用以批量创建/更新/删除多个文档。

1、通过mget批量检索多个文档

Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库

2、通过bulk批量创建/更新/删除多个文档

1、bulk的使用规范和使用案例

Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库

2、bulk处理文档大小的最佳值

Elasticsearch数据库
Elasticsearch数据库

7、Elasticsearch的锁机制

1、为什么要使用锁机制

Elasticsearch数据库
Elasticsearch数据库

2、加锁的机制:悲观锁和乐观锁

悲观锁和乐观锁是什么已经在《Mysql.docx》介绍了。

1、其中提到对于数据库而言,悲观锁只能通过数据库本身实现,但是ES并没有提供悲观锁机制。

2、其中也提到对于数据库而言,乐观锁是通过逻辑实现的,在ES数据库上实现乐观锁便是通过文档的默认字段_version实现的。

3、ES实现乐观锁的两种方式

前提:两种修改文档(_update更新和put覆盖)的方式都会导致目标文档的_version自增1或者直接改为指定的。

3.1、内部版本控制

指定的version必须要 = 文档目前的_version,否则就报error。如果符合就修改成功,并且把文档version自增1。

Elasticsearch数据库
Elasticsearch数据库

3.2、外部版本控制

搭配version_type=external,指定的version必须 > 文档目前的_version,否则就报error。如果符合就修改成功,并且把文档version直接变成指定的。

Elasticsearch数据库
Elasticsearch数据库

8、Elasticsearch如何做Mapping

1、什么是mapping

映射就是在创建索引或者先创建索引后修改的时候,预先定义字段的数据类型以及相关属性。

如果程序员没有主动为索引创建映射,则以后在创建文档时,ES会智能的给索引建立映射,处理每个字段的数据类型和属性。

2、ES里可以为字段定义哪些数据类型和属性

Elasticsearch数据库
Elasticsearch数据库

3、关于映射的具体操作

Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库

9、ES查询

Elasticsearch数据库
Elasticsearch数据库

1、基本查询

Elasticsearch数据库
Elasticsearch数据库

1、使用q查询

Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库
Elasticsearch数据库

2、使用term系列查询

1、使用term查询
Elasticsearch数据库
Elasticsearch数据库
2、使用terms查询
Elasticsearch数据库
Elasticsearch数据库

3、使用match系列查询(有智能搜索的效果)

1、使用match查询
Elasticsearch数据库
Elasticsearch数据库
2、使用match_phrase查询
Elasticsearch数据库
Elasticsearch数据库
3、使用multi_match查询
Elasticsearch数据库
Elasticsearch数据库
4、使用match_all查询
Elasticsearch数据库
Elasticsearch数据库

5、使用prefix作前缀匹配查询

Elasticsearch数据库
Elasticsearch数据库

6、使用range作区间搜索

Elasticsearch数据库
Elasticsearch数据库

7、使用wildcard查询

Elasticsearch数据库
Elasticsearch数据库

8、使用fuzzy进行模糊搜索(有智能搜索的效果)

Elasticsearch数据库
Elasticsearch数据库
1、使用fuzzy查询
Elasticsearch数据库
Elasticsearch数据库
2、使用fuzzy_like_this查询
Elasticsearch数据库
Elasticsearch数据库
3、使用fuzzy_like_this_field查询
Elasticsearch数据库
Elasticsearch数据库

2、组合查询和过滤查询

当在请求中看到must(and)、should(or)、must_not(not)、filtered、filter、exists、gt、lt、missing、negative、negative_boost、_cache、constant_score、not_match_query、indices等词时,就是使用了组合查询或者过滤查询,太麻烦,不研究了。仅介绍下图这一种,使用bool也是最常用的:

Elasticsearch数据库
Elasticsearch数据库

3、查询的辅助字段,用以处理结果集

1、使用from和size控制返回文档的数量

Elasticsearch数据库
Elasticsearch数据库

2、使用version返回文档的_version

Elasticsearch数据库
Elasticsearch数据库

3、使用fields返回指定字段

Elasticsearch数据库
Elasticsearch数据库

4、使用partial_fields返回指定字段

Elasticsearch数据库
Elasticsearch数据库

5、使用sort排序

Elasticsearch数据库
Elasticsearch数据库

6、使用通配符,通常是用在字段名中

Elasticsearch数据库
Elasticsearch数据库

10、ES集群管理

1、ES的数据为何是安全的

Elasticsearch数据库
Elasticsearch数据库

2、elasticsearch.yml文件配置

Elasticsearch数据库
Elasticsearch数据库

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130213.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是Elasticsearch
    • 1、概念以及特点
      • 2、项目中为何使用(主搜索次分析再存储)
        • 2.1、搜索引擎
        • 2.2、日志分析
      • 3、底层架构
        • 4、使用状况以及与其他搜索引擎的对比
        • 2、RESTFul 介绍
          • 1、什么是RESTFul
            • 2、CURL命令的讲解
              • 2.1、什么是CURL
              • 2.2、具体应用
            • 3、Elasticsearch API文档查看
            • 3、Elasticsearch及相关插件的安装
              • 1、安装Elasticsearch并启动服务
                • 2、安装第三方插件
                  • 2.1、Head插件
                  • 2.2、Bigdesk插件
                  • 2.3、Mavel插件
              • 4、倒排索引(ES具体是怎么搜索的)
                • 1、倒排索引和正向索引
                  • 2、倒排索引建立索引的具体方式
                    • 始、确定需求
                    • 1、把文档进行分词(怎么分要看实际需求)
                    • 2、得到单词集合和文档集合(使用ID标记)
                    • 3、根据上面俩集合得到这个矩阵/数据结构
                    • 4、根据上表建立索引
                    • 终、实现需求了
                • 5、ES的CURD操作
                  • 1、ES的API(本次在Mevel里演示,等同head和curl)
                    • 1.1、操作索引的API
                    • 1.2、操作类型的API
                    • 1.3、操作文档的API(每次仅能操作一个文档)
                  • 2、ES的内置字段以及字段的类型
                  • 6、批量操作文档
                    • 1、通过mget批量检索多个文档
                      • 2、通过bulk批量创建/更新/删除多个文档
                        • 1、bulk的使用规范和使用案例
                        • 2、bulk处理文档大小的最佳值
                    • 7、Elasticsearch的锁机制
                      • 1、为什么要使用锁机制
                        • 2、加锁的机制:悲观锁和乐观锁
                          • 3、ES实现乐观锁的两种方式
                            • 3.1、内部版本控制
                            • 3.2、外部版本控制
                        • 8、Elasticsearch如何做Mapping
                          • 1、什么是mapping
                            • 2、ES里可以为字段定义哪些数据类型和属性
                              • 3、关于映射的具体操作
                              • 9、ES查询
                                • 1、基本查询
                                  • 1、使用q查询
                                  • 2、使用term系列查询
                                  • 3、使用match系列查询(有智能搜索的效果)
                                  • 5、使用prefix作前缀匹配查询
                                  • 6、使用range作区间搜索
                                  • 7、使用wildcard查询
                                  • 8、使用fuzzy进行模糊搜索(有智能搜索的效果)
                                • 2、组合查询和过滤查询
                                  • 3、查询的辅助字段,用以处理结果集
                                    • 1、使用from和size控制返回文档的数量
                                    • 2、使用version返回文档的_version
                                    • 3、使用fields返回指定字段
                                    • 4、使用partial_fields返回指定字段
                                    • 5、使用sort排序
                                    • 6、使用通配符,通常是用在字段名中
                                • 10、ES集群管理
                                  • 1、ES的数据为何是安全的
                                    • 2、elasticsearch.yml文件配置
                                    相关产品与服务
                                    Elasticsearch Service
                                    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档