Elasticsearch

一 .简介

(1) 一切设计都是为了提高搜索的性能

(2) 是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎

(3) 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索

(4) 可以扩展到上百台服务器,达到扩容效果,添加更多节点;处理PB级别的结构化或非结构化数据

(5) 面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式

类别数据库

二 .概念

1.索引(index)

一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方,并通过引用此名称完成文档的创建、搜索、更新及删除操作

2.类型(type)

类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求;一般来说,类型就是为那些拥有相同的域的文档做的预定义

3.文档(document)

文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示;文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”,文档中,域的数据存储时支持“string”、“numbers”、“Booleans”和“dates”几种类型,不同类型的数据在索引时是略有区别的。在 Elasticsearch 中文档是 不可改变 的,不能修改它们。

4.映射(mapping)

所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等;ES还提供了额外功能,例如将域中的内容按需排序

5.集群(cluster)

ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力,多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群

6.节点(node)

运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索,操作节点通过为其配置的ES集群名称确定其所要加入的集群,用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性可以将请求发送到集群中的任何节点,包括主节点。每个节点都知道任意文档所处的位置,并且能够将请求直接转发到存储我们所需文档的节点

7.分片(shared)和副本(replica)

ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。每个分片其内部都是一个全功能且独立的索引,创建索引时,用户可指定其分片的数量,默认数量为5个

Shard有两种类型:primary和replica,即主shard及副本shard。

Primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。

Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。

每个Primary shard默认配置了一个Replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能

三 . 数据查询

Query API是ElasticSearch的API中较大的一部分,基于Query DSL(JSON based language for building complex queries),可完成诸多类型查询操作,

查询执行过程通常要分成两个阶段,分散阶段及合并阶段;分散阶段是向所查询的索引中的所有shard发起执行查询的过程,合并阶段是将各shard返回的结果合并、排序并响应给客户端的过程

向ElasticSearch发起查询操作有两种方式:一是通过RESTful request API传递查询参数,也称“query-string”;另一个是通过发送REST request body,也称作JSON格式

向ElasticSearch发起查询操作有两种方式:一是通过RESTful request API传递查询参数,也称“query-string”;另一个是通过发送REST request body,也称作JSON格式。

search_api


request body

(1) 空搜索 GET /_search

hits:返回结果中最重要的部分,在 hits 数组中每个结果包含文档的 _index 、 _type 、 _id ,加上 _source 字段

took:执行整个搜索请求耗费了多少毫秒

shards: 查询中参与分片的总数,已经这些分片成功了多少失败了多少

(2) 多索引,多类型

/_search             在所有的索引中搜索所有的类型

/gb/_search        在 gb 索引中搜索所有的类型

/gb,us/_search   在 gb 和 us 索引中搜索所有的文档

/g*,u*/_search      在任何以 g 或者 u 开头的索引中搜索所有的类型

/gb/user/_search   在 gb 索引中搜索 user 类型

/gb,us/user,tweet/_search   在 gb 和 us 索引中搜索 user 和 tweet 类型

/_all/user,tweet/_search  在所有的索引中搜索 user 和 tweet 类型

(3) .查询表达式

结构
一个完整的查询请求

match_all:查询简单的,匹配所有文档,在没有指定查询方式时,它是默认的查询

match:全文搜索+精确查询,在执行查询前,它将用正确的分析器去分析查询字符串

multi_match :在多个字段上执行相同的match语句

range:查询找出落在指定区间的数字或时间

term:精确值匹配,查询对于输入的文本不分析,所以它将给定的值进行精确查询

terms: 查询和term一样,允许多值进行匹配

exists:指定字段的值是否存在

missing :指定字段的值是否没有

(4) .合并查询语句

bool : 将多查询组合在一起

must: 文档 必须 匹配这些条件才能被包含进来。

must_not:文档必须不匹配这些条件才可以被包含进来

Should: 如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分

filter: 必须匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档

在实际开发过程中,会根据不同的业务,会出现各种不同程度的查询语句和组合语句

四.倒排索引

倒排索引是搜索引擎的核心,主要作用快速搜索;在搜索引擎中,每个文档都有一个对应的文档ID,文档内容被表示为一系列关键词的集合

参考文档:elasticsearch 权威指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343