初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」Elastic search 趣简史 安装 基础知识 核心概念

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

本文作为Elastic search系列的开篇之作,简要介绍其简要历史、安装及基本概念和核心模块。

  •  简史

Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索引指向一个或者多个分片—shards,一个分片就是一个Lucene实例。Lucene的作者——Doug Cutting同是也是hadoop的作者)。

ES的诞生于04年,Shay Banon——据传刚失业又新婚,祸不单行(港蓉蒸蛋糕,蒸的吗),在Lucene的基础上为他去伦敦学厨师的老婆做的食谱搜索。一不小心,搞出了ES,然而老婆大人的食谱搜索却遥遥无期,估计Shay在家键盘跪烂。

然后呢,官网出了个Kibana (ELK—Elasticsearch, logstash, kibana三剑客之一,另外Elastic认证了解一下——截止目前国内考过的不足500人),一个web应用程序,用图表啊、地图啊等面板来可视化数据(图像天然具有亲和力,详见 Guide初步的安装及说明详见附录5),如下图:

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

  • 安装

windows上安装Elastic search 请参考附注2 链接(需要安装IK分词器,以更好的支持汉语分词;安装elasticsearch-head简单的可视化的web客户端,可支持基本的查询操作或者通过DSL检索结果——为支持它,需要装Node.js; node.js 又需要集成 npmgrunt

elasticsearch-head 效果如下图:

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

  • 核心概念

  Elastic Search是一个实时分布式搜索和分析引擎,处理大数据相当的擅长。Stackoverflow、Github、Wiki以及英国卫报等在全文检索、代码搜索(Github超过1300亿行)、地理位置查询、社交网络实时数据等领域均广泛深入的使用了ES,国内的字节跳动、腾讯、阿里、百度均有相关应用。目前认为其核心概念包括:

  • Score

就是根据一套规则和算法,满足搜索条件的文档,其中相关信息的匹配度(或称之为相关度),打分越高,则匹配度越高,搜索结果按打分高低(匹配度)倒叙展示。如下图的一个搜索结果:

 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

 具体的Score,涉及到Norm(归一化)和Boost(可以设置field和document的Boot—相当于权重的概念)

  • 集群(Cluster)、节点(Node)和分片(shards)

集群即多台物理机构成,每个物理机包含多个节点(其中只有一个Master Node),每个节点包含多个分片,每个分片可以有0个或多个复制分片做必要的数据冗余。其分布式特性,通过底层的如下操作自动完成:

(1)将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。

(2)将分片均匀的分配到各个节点,对索引和搜索做负载均衡。 冗余每一个分片,防止硬件故障造成的数据丢失。

(3)将集群中任意一个节点上的请求路由到相应数据所在的节点。

(4)无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移。

  • 索引(Index)

Elastic Search使用倒排索引(Inverted Index)来做快速的全文搜索(不同于一般数据库的索引,用B-Tree来实现)。具体倒排索引原理,可能需要单独的一篇博客来说明

  • 分词(analysis)

分析(analysis)是这样一个过程:

(1)首先,表征化一个文本块为适用于倒排索引单独的词(term)

(2)然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”

 

这个工作是分析器(analyzer)完成的。一个分析器(analyzer)包含如下三个功能:

  (1)字符过滤器

  首先字符串经过字符过滤器(character filter),它们的工作是在表征化(译者注:这个词叫做断词更合适)前处理字符串。 字符过滤器能够去除HTML标记,或者转换 “&” 为 “and” 。

  (2)分词器

  下一步,分词器(tokenizer)被表征化(断词)为独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开 (译者注:这个在中文中不适用)。

  (3)表征过滤

  最后,每个词都通过所有表征过滤(token filters),它可以修改词(例如将 “Quick” 转为小写),去掉词(例如停用词 像 “a” 、 “and”“”the” 等等),或者增加词(例如同义词像 “jump” 和 “leap” )

 

  • 字段共享

ES本质上和关系型数据库还是有差别,并不能和DB的各个概念完全对应。默认同名的Fields在整个Indices共享,因此你不能在Type里定义同名的多个Filelds,导致删除数据只能整个索引一起删除,而不能单单删除一个Type


 

  • 基础知识
  1. 文档

Elastic search是面向文档的,文档归属于一种类型(type),而这些type存在(索引)index里。传统关系数据库和ES的简单对比如下图(6.0版本后默认支持single type,涉及字段共享的优化):

Relational DB Databases Tables Rows Columns
ElasticSearch Indices Types Documents Fields

    2.检索文档

支持HTTP的GET、PUT、HEAD、DELETE(由于字段共享等原因,ES目前不支持删除表,只能整个索引一起删除)、POST操作如下图(故可直接用postman、SoapUI、Chrome插件ElasticSearch Head 等工具发http请求来查询文档):

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

ES提供丰富灵活的查询语句(另外Elasticsearch-sql插件可以自动将sql语句翻译为DSL)——Query DSL(基本的语法有filter,bool—包括should【类似于Or】、must【类似于and】, term—精确匹配, match,range,exists,missing等),有了它构建复杂、强大的查询都不事儿,如下图(用postman,查询 age > 30 last_name = “smith”):

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

    3. 字段数据类型

 官方文档:Mapping types (Mapping——映射,相当于关系数据库的表结构定义)

  •  核心数据类型 (只列工作中常用的):

 

Data Types  Values
String  text, keyword
数值类型(Numberic dataTypes) long, integer, short, byte, double, float
日期类型 date
布尔类型 boolean
范围类型 integer_range, float_range, long_range, double_range, date_range
二进制类型 binary
  • 复杂数据类型
Data Types Values
数组类型 不需要特殊的数据类型支持
Object type  object — 代表单个json
嵌套类型 nested — 代表一组json

 

  • 地理相关的数据类型
Data Types Values
坐标点类型 geo_point用来表征经纬度
地理图形类型 geo_shape用来表征复杂的形状,如多边形

 

  • 专门的数据类型
Data Types Values
IP类型 ip — 用于IPv4和IPv6(项目中高频使用)
token数量类型 token_count — 统计字符串中token的数量

 

  • 尾声

(1)ES不支持Join,但支持aggregations,类似于SQL的group by

(2)通过Merge segments可以提高查询速度,最后Merge成的Segments个数越小,查询时间提高的越快。Merge segments过程比较耗费磁盘和CPU,所以建议凌晨执行该操作

(3)ES支持将各种数据库的数据导入,主要通过logstash;ES之间的数据拷贝,可以用elasticdump


 致敬 Doug Cutting (Lucene、Nutch 、Hadoop之父)

初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》「终于解决」

谈到成功,Cutting认为他的成功主要归功于两点:

  • 对自己工作的热情(Cutting在大学时就开始做Infrastracture类的程序,还用 Lisp为Emacs贡献过代码,他非常喜欢自己的程序被千万人使用的感觉)
  • 目标不要定得过大,要踏踏实实,一步一个脚印

附:

1)  官网guide 及对应中文版 — Elasticsearch: 权威指南(pdf下载)

2)  Elasticsearch6.4.0-windows环境部署安装

3)  Linkin of Doug Cutting

4)  Hadoop 十岁生日时 Doug Cutting的讲话

5)  Kibana(一张图片胜过千万行日志)

 

*******************************************************************************

精力有限,想法太多,专注做好一件事就行

  • 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
  • 写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;如果恰好又对别人有点帮助,那真是一件令人开心的事

*******************************************************************************

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7134.html

(0)
上一篇 2023-03-26
下一篇 2023-03-26

相关推荐

  • NoSQL简介 – 纪宇

    NoSQL简介 – 纪宇NoSQL指的是非关系型数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,NoSQL是web2.0时代海量数据催生的产物 特点 不支持SQL语法 NoSQL的世界中没有一种通用的语言,每种n

    2022-12-20
    162
  • redis 企业版_redis缓存什么数据

    redis 企业版_redis缓存什么数据
    一、 企业级缓存数据库简述 1、 缓存数据库的概念 传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Reside…

    2023-04-07
    154
  • 2.LinkedBlockingQueue[亲测有效]

    2.LinkedBlockingQueue[亲测有效]java.util.concurrent包下的新类。 实现接口:BlockingQueue LinkedBlockingQueue就是其中之一,是一个阻塞的线程安全的队列,底层采用链表实现。 Lin…

    2023-04-09
    210
  • Python随机生成字符串

    Python随机生成字符串在Python中,如果需要生成随机字符串,我们可以使用Python自带的random模块。该模块提供了生成随机数的方法,我们可以通过这些方法轻松生成随机字符串。在本文中,我们将介绍如何使用Python随机生成字符串。

    2024-05-05
    66
  • 如何使用 sql 存储过程简化复杂的操作步骤_sql存储过程入门

    如何使用 sql 存储过程简化复杂的操作步骤_sql存储过程入门本文介绍什么是 SQL 存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。 一、存储过程 迄今为止,我们使用的大多数 SQL 语句都是针对一个或多个表的单条语句。并非

    2023-05-17
    134
  • mysql left join 执行顺序逻辑

    mysql left join 执行顺序逻辑select * from user left join info on user.uid=info.uid where user.uid in (2,3); mysql的执行逻辑如下 user_r…

    2022-12-24
    147
  • 用了一段时间python了的简单介绍

    用了一段时间python了的简单介绍用到threading的Timer,也类似单片机那样子,在中断程序中再重置定时器,设置中断,python实例代码如下:

    2023-11-02
    153
  • 巨杉数据库怎么样_分布式数据库开发

    巨杉数据库怎么样_分布式数据库开发随着企业应用的类型不断拓展,在海量数据、高并发、多类型数据的应用场景下,底层数据平台对于混合数据类型、混合业务场景处理能力的要求不断扩大,这就催生了 HTAP(混合事务和分析处理)的需求。 新一代分…

    2023-03-19
    160

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注