一、基础概念
1.集群和节点:elasticsearch也采用分布式存储,它本质上是一个分布式数据库。支持存储PB级别的数据,并可以进行水平扩展。
2.
索引:含有相同属性的文档集合 (小写且没有下划线) => database
类型:索引可以定义 =>表
文档:文档是可以北京索引的基本数据单位 =>一行记录
3.分片和备份:
分片:每个索引都有多个分片,每个分片是一个Lucene索引 => 将索引分成多个分片,减轻机器压力,可以水平扩展
备份:拷贝一份完成了分片的备份。因为是分布式存储,所以就需要在不同节点上进行数据备份。采用类似于交叉存储的策略,以防止一台机器宕机而导致数据丢失。
二、RESTFul API
1. API基本格式:http://<ip>:<port>/<索引>/<类型>/<文档id>
常见http动作:get post
2.创建索引:
结构化索引:_mapping
非结构化索引:
四、文档
1.创建文档:
_index 、_type 、_id 唯一确定一个文档
2.删除文档:
在es中,文档是不能被更改的。只能被替换。也就是需要删除一个文档,它会标记旧文档为删除,并添加一个新文档。旧版本文档并不会立即删除,但你也不能去访问它。es会在你继续添加更多索引的时候清理被删除的文档。(这个思想和linux 的删除rm命令挺像的,当rm一个文件或目录时,linux也不是立刻删除,而是将那个文件的bitmap索引标记为已删除,之后再逐步清理;这样做也许是为了防止误删)
3.更新文档:
五、结构化查询
一条查询语句会计算每个文档与查询语句的相关性,相关性越高,_score越高。
1. 查询过滤语句:
过滤:term、 terms 、range、 bool(must、must not 、should)
查询:match_all、match、multi_match
查询与过滤条件的合并:
六、映射和分析
1、分析
es中数据可以分为两大类:确切值和全文文本。
确切值是确定的,正如它的名字一样。比如一个date或用户ID,也可以包含更多的字符串比 如username或email地址。
确切值 和 就并不相同。确切值 和 也不相同。 全文文本,从另一个角度来说是文本化的数据(常常以人类的语言书写),比如一篇推文
(Twitter的文章)或邮件正文。
为了能查询相关的文档,es会对文本进行分析,再建立一个倒排索引。
分析(analysis)是这样一个过程:
首先,标记化一个文本块为适用于倒排索引单独的词(term) 然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”
当我们索引(index)一个文档,全文字段会被分析为单独的词来创建倒排索引。不过,当我们 在全文字段搜索(search)时,我们要让查询字符串经过同样的分析流程处理,以确保这些词在 索引中存在。
2.映射
为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本 (Full-text)或精确的字符串值,Elasticsearch需要知道每个字段里面都包含了什么类型。这 些类型和字段的信息存储(包含)在映射(mapping)中。
索引中每个文档都有一个类型(type)。 每个类型拥有自己的映 射(mapping)或者模式定义(schema definition)。一个映射定义了字段类型,每个字段的数 据类型,以及字段被Elasticsearch处理的方式