文档章节

菜鸟学ElasticSearch:认识ES

ringingks
 ringingks
发布于 2016/12/25 20:54
字数 1781
阅读 78
收藏 1

       大家知道elasticsearch(以下简称es)前,应该也接触过其他的一些数据服务,比如mysql、oracle这类关系型数据库,或者mongodb、solr这种nosql的非关系型数据库,甚至也有人使用的是lucene。现在研究es了,那就先得知道es是啥,其基本的工作原理是啥,有些啥特性。

       先套用百度百科里的介绍:

       ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

       根据这段介绍,我们可以知道这么几个关键点:

       1、  es的搜索功能很强大。

       2、  es支持RESTful web接口。

       3、  es是基于lucene的分布式数据搜索引擎。

       第1、点是我们选择es的主要原因,第2点告诉我们es可以直接通过http api 的形式进行访问调用,第3点则点出了es的核心引擎——lucene,此外es是分布式架构。

       基于第3、点,如果了解过lucene的同学肯定就知道es的查询大概是怎么回事了,这个对后面如何使用es帮助非常大。

       我们来在开始使用es之前,了解一些术语:

       Cluster 集群

       代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

       这里多说一句,在之前《菜鸟学ElasticSearch:了解一下基本的配置》里,有关于节点的类型的一些介绍,不同的节点组合意味着es的集群模式的一些变化。这一点在后面做优化的时候,可以深入了解一下。

 

       Shards 分片

       代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

       如果你之前接触mongodb这里服务,你可以近似的认为这个shards就是数据主节点的概念,但是又何mongodb有一些不一样,es的分片是可以在散布在任意一个数据节点上的。

需要注意的一点是,分片并非越多越好。因为es进行数据处理的时候,是要从各个分片上获取结果来进行处理的,过多的分片将会增加服务器的负荷。一般我们建议一个索引的分片为1~3个。另外, 分片上的数据也并非刻意无限增长,超过一定数量级的分片es服务处理能力也是有有限制的。这个最大值建议是10g 。

 

      Replicas 副本

      代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

      实际使用中,副本只是es给予我们的一个容错措施,但是真当出现重大服务器故障的时候,这个副本通常也没啥鸟用的……此外,过多的副本,也是会增加一些服务器资源的无意义的消耗。所以,这个副本的数量,一般建议是0~1个。

 

      index索引

      es的数据是按照索引分别进行存储的,如果按照sql数据库的说,你可以理解为一个索引其实就是一个数据库实例(或USER)。我们进行数据检索时,一般会从一个或者多个index里去进行检索。

 

      type 类型

      如果按照sql数据库的说,你可以理解为一个索引其实就是一个数据表(或table)。一个index下面可以有多个type,这些type中的数据的field(字段)可以不用一致。

      需要注意的是,似乎在2.*以后,es在逐渐淡化type的一些使用,鼓励大家尽量分index进行数据索引。

 

      分词(Tonkenizer,Analyzer)

      这个概念实际是lucene的。简而言之就是将一组连续的字符,拆分成相对有意义的内容。

      比如,“我爱北京天安门”,分词器可能会处理为“我”、 “爱”, “北京”, “天安门”。es在实际分析的时候,是将分词的结果存储起来,然后查询的时候,拿用户的给予的关键字对存储起来的词干进行匹配,然后进过分析计算后返回给我们最相关的结果。

      还是以“我爱北京天安门”为例子,假设我们给予的keywor是“北京”,那么按照上面分词结果,是能够返回“我爱北京天安门”这个结果的;但是,我们如果是给的keyword是“北”,则将不会有结果返回。

      如果你使用es的主要用途是进行搜索,那么需要非常关注这些内容,因为这个将决定你后面搜索的效果的好坏。

 

      Mapping

      其实就是数据结果的映射关系,定义数据的field的类型,索引的分析器方式。

      熟悉sql数据库的同学,可以当这个是定义表字段的意思。

      和sql数据库有些不同的是,如果数据中存在未定义的field,也是能写入到es中的,这个时候,es会根据写入的第一条数据,来自动设置这个未定义的field的mapping类型。

      在实际使用es中,mapping的重要性远远大于sql里面的表字段定义,实践过程中,我们一般都会堆数据先抽取样本,定义mapping进行测试,当最后结果符合我们的要求后,才会对数据进行整体mapping 。

      关于mapping必须要提到的一点是,一旦索引进行了mapping后,如果你想要调整mapping,将不会对当前已经存在的index生效。只有删除该索引(好像也可以删除index下的所有数据),使用新的索引才能生效。

 

以上是一些常用的术语,理解这些内容后,会帮助我们更好的使用es。

© 著作权归作者所有

ringingks
粉丝 0
博文 6
码字总数 4129
作品 0
成都
项目经理
私信 提问
elasticsearch教程--Plugins篇-插件

目录 概述 环境准备 认识es插件 插件安装 插件管理命令 彩蛋 概述 上一篇博文记录了elasticsearch分词器, 在地大物博的祖国使用es,不得不考虑中文分词器,es内置的分词器对中文分词的支持可以...

java_龙
2018/10/25
1K
0
Elasticsearch第4届国内开发者大会北京站

第4届Elasticsearch国内开发者大会北京站 第四届Elasticsearch国内开发者大会北京站马上就要开始了,目前已确定分享的主题有6篇了,有来自百度\新浪\芒果TV等公司同学们的精彩分享,有国内最大规...

Medcl
2015/09/06
19
0
Elasticsearch第4届国内开发者大会北京站

第4届Elasticsearch国内开发者大会北京站 第四届Elasticsearch国内开发者大会北京站马上就要开始了,目前已确定分享的主题有6篇了,有来自百度\新浪\芒果TV等公司同学们的精彩分享,有国内最大规...

Medcl
2015/09/06
655
7
跟我学Spring Cloud(Finchley版)-26-使用Elasticsearch作为Zipkin Server的后端存储

前文搭建的Zipkin Server是没有后端存储的——数据会存储在Zipkin的内存中。这一般不适合生产,本节来探讨如何将Zipkin中的数据持久化。 Zipkin支持多种存储: 内存(默认) MySQL(数据量大...

周立_ITMuch
04/18
29
0
Elastic Search学习笔记1——安装elasticsearch2.4.6

Elastic Search 简介 基于Apache Lucene的开源搜索引擎 采用Java编写 RESTful API风格 较容易的横向扩展 应用场景 海量数据分析引擎 数据搜索引擎 数据仓库 下载 https://www.elastic.co/dow...

晨猫
2018/03/09
75
0

没有更多内容

加载失败,请刷新页面

加载更多

java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
38分钟前
6
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
39分钟前
9
0
Wifiphisher —— 非常非常非常流氓的 WIFI 网络钓鱼框架

编者注:这是一个非常流氓的 WIFI 网络钓鱼工具,甚至可能是非法的工具(取决于你的使用场景)。在没有事先获得许可的情况下使用 Wifiphisher 攻击基础网络设施将被视为非法活动。使用时请遵...

红薯
今天
48
1
MongoDB 4 on CentOS 7安装指南

本教程为CentOS x86_64 7.x操作系统下,MongoDB Community x86_64 4.2(GA)安装指南。 安装方式一:yum repo在线安装 [此方式较为简单,官方推荐] Step1:新建MongDB社区版Yum镜像源。 # vim ...

王焱君
今天
7
0
go-micro 入门教程1.搭建 go-micro环境

微服务的本质是让专业的人做专业的事情,做出更好的东西。 golang具备高并发,静态编译等特性,在性能、安全等方面具备非常大的优势。go-micro是基于golang的微服务编程框架,go-micro操作简单...

非正式解决方案
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部