索引(index)

1. 作为名词: 索引(index)指我们在 ES 中用来存放 doc 的一个库,类似数据库系统的 DB 概念。

2. 作为动词: 指把数据经过分析并存放到 ES 中形成索引(名词概念)的过程。在 Lucene 里,索引是指把文档(Document)经过分析(Analyzed)并创建倒排索引的过程。是一系列的操作步骤。

查询(query)

查询一般指具体的查询条件,比如:"性别:男" 这就是一条查询语句。

搜索(search)

搜索是指从搜索引擎中获取满足我们一条或多条查询(query)语句的文档集合的过程,比如:搜索"性别:男"、"年龄>30"的人员列表,这样一条搜索就包含2条查询(query)条件。

分片(shards)

理解:

分片,通俗的将就是将一个 ES 索引(index)切割为几个分片存放。一个分片其实是一个 Lucene 实例(Lucene 索引,为了不应起混淆称为实例,每个分片都提供完整的搜索引擎的功能),能提供完整的搜索功能。

用途:

1. 通过 shards 可以横向分割或扩展 index 的容量

2. 通过 shards 可以分发和并发你的操作,从而提高性能

示例:

假如你有一个 index 需要大约 1T 的磁盘容量,把这样的整个 index 存储在同一个 node 上,有时是无法接受的。

  • 可能你的单个 node 的存储容量不够 1T
  • 性能问题,每次的 search 操作都是从这样庞大的一个 index 中去,性能可能比较低下

通过 shards 就可以很好解决该问题:

  • 把这个 1T 的 index 分成多个 shards ,可以使它存放在多个 node 上,从而可以解决存放在单个 node 存储容量不足的问题
  • 每一个 search 操作都是在多个 shards 中并发进行的,性能可以成倍提升

复制(replica)

理解:

复制,就是对每一个 shards 提供多个备份的功能,从而可以实现较高的可靠性。

用途:

1. 提供容灾能力,分片不会由于某个 node 的不可用(故障、离线)而不可用,这也就要求了主分片和通过它复制出来的分片(复制分片)必须位于不同的 node 上

2. search 操作可以在所有的分片进行(主分片、复制分片),所以 replica 也能提高 search 的吞吐率,从而提高性能

示例:

假如你的 index 有3个 shards 位于3个不同的 node 上,且没有 replica(只有主分片)。

但其中某个 node 故障了,这将导致该 index 部分 shards 不可用,不能提供完整的功能。

通过设置 replica 就可以在一个 shard 故障后,从它的 replica 分片中进行 search ,整个 index 的所有 shards 依然可用。

路由(Index API Routing)

理解:

这里的路由(routing)是一个 index API 中的参数,通过这个参数来控制文档存放在某个 shard(分片)上去。当然在 search 时候也可以利用该 rouging。

用途:

1. 一个文档在 index 的时候,会通过文档的 ID 来进行 Hash 计算,从而决定该文档存放到哪个分片上去。通过 routing 参数可以人为控制存放的分片(前提你需要知道 Hash 的算法)。

如果有了 rouging 参数,那么就会用 routing 参数的值来进行 Hash 计算,而不是文档的 ID。

2. 更大的用处在于,在 search 时候,默认都是把请求广播发往所有的 shards 上去,而在 search 时候指定 rouging,就可以只请求特定的 shards,从而加快响应。

示例:

lcy@lcy:~$ curl -XPUT localhost:/lcy/test/?routing= -d {"test":}    //在 lcy/test/ 上创建 id=1 的文档,分片位置用1来 Hash
{"_index":"lcy","_type":"test","_id":"","_version":,"_shards":{"total":,"successful":,"failed":},"created":true}
lcy@lcy:~$
lcy@lcy:~$ curl -XPUT localhost:/lcy/test/?routing= -d {"test":} //在 lcy/test/ 上创建 id=1 的文档,分片位置用2来 Hash
{"_index":"lcy","_type":"test","_id":"","_version":,"_shards":{"total":,"successful":,"failed":},"created":true}
lcy@lcy:~$
lcy@lcy:~$ curl -XGET localhost:/lcy/test/ //广播查询 lcy/test/1 谁先返回就是谁
{"_index":"lcy","_type":"test","_id":"","_version":,"_routing":"","found":true,"_source":{test:}}
lcy@lcy:~$
lcy@lcy:~$ curl -XGET localhost:/lcy/test/?routing= //查询特定分片上的 lcy/test/1
{"_index":"lcy","_type":"test","_id":"","_version":,"_routing":"","found":true,"_source":{test:}}
lcy@lcy:~$

同一个index/type,可以存放2个 ID 相同的文档,仅仅是分片不同,而且都可以被搜索。这个怎么解释???

ElasticSearch 概念解析的更多相关文章

  1. Elasticsearch技术解析与实战 PDF (内含目录)

    Elasticsearch技术解析与实战                                  介绍: Elasticsearch是一个强[0大0]的搜索引擎,提供了近实时的索引.搜索.分 ...

  2. elasticsearch技术解析与实战ES

    elasticsearch技术解析与实战ES 下载地址: https://pan.baidu.com/s/1NpPX05C0xKx_w9gBYaMJ5w 扫码下面二维码关注公众号回复100008 获取 ...

  3. mongodb基本概念解析

    MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术 ...

  4. 轻松搞懂elasticsearch概念

      本文主要介绍elasticsearch6.0的一些基本概念,有助于深入理解.研究elasticsearch和elk系统 一图胜千言 elasticsearch与mysql参照来看 添加一条数据 紫 ...

  5. Android中px, ppi, dpi, dp, dip, sp概念解析

    Android中px, ppi, dpi, dp, dip, sp概念解析

  6. MongoDB学习笔记—概念解析

    Mongo基本概念 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection ...

  7. Photoshop入门教程(一):文本新建与概念解析

    写在开头 <Photoshop实用入门>系列教程可能对于一点都没有接触过Photoshop的人来说不太容易接受,因为本教程并没有细致到教你如何使用画笔工具等一系列很基础的东西,有些地方的讲 ...

  8. RabbitMQ安装、集群搭建、概念解析

    RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...

  9. 如何在Elasticsearch中解析未分配的分片(unassigned shards)

    一.精确定位到有问题的shards 1.查看哪些分片未被分配 curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unas ...

随机推荐

  1. 430单片机之定时器A功能的大致介绍

    总的来说,430单片机一共有三个定时器,定时器A,定时器B,还有就是看门狗定时器,这里我们主要是讨论430单片机的定时器A的功能,定时器A的功能是我目前见过最厉害的定时器,视频上说用好定时器A的话,对 ...

  2. [GC]一个简单的Garbage Collector的实现

    前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为了增加自己的理解,决定把大牛的想法和代码分析一遍,与 ...

  3. NIOP1995 石子合并(区间DP)

    状态转移方程在代码中标出 本题注意是圆形,所以之前要预先处理一下s数组.处理之后总长度为2*n-1.第一个合并的起点有n个,所以总的方案数是n 注释在代码中标出 http://www.rqnoj.cn ...

  4. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

  5. 【原创】linux命令bc使用详解

    最近经常要在linux下做一些进制转换,看到了可以使用bc命令,如下: echo "obase=10;ibase=16;CFFF" | bc 用完以后就对bc进行了进一步的了解,  ...

  6. 【转载】gcc和g++的区别

    [说明]本文转载自 静心 的文章 http://blog.163.com/lu_jun520/blog/static/5699613420116205148239/ 一般linux系统都自带了gcc编 ...

  7. Python解释器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...

  8. void类型及void指针

    1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. 2 ...

  9. Keil µVision4 中出现中文乱码的解决办法

    首先得说一下,以前都没有遇到过类似的问题,但是看到有个同学曾经满篇的乱码那叫个心疼. 这里我所说的办法其实只是格式转换的问题,对于其他原因造成的,可能会在以后遇到的时候再来处理了.另外,在将代码文件转 ...

  10. 高性能mysql主主架构

    A.环境描述 服务器A(主) 192.168.0.105 服务器B(主) 192.168.0.108 Mysql版本: 5.6.21 System OS:CentOS release 6.5 主从需同 ...