Elasticsearch 入门
1、Elasticsearch 介绍
-
ES是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于RESTful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。
-
Lucene:Lucene本身就是一个搜索引擎的底层。Lucene 一个搜索引擎框架的底层实现,用起来较为麻烦,es就进行了二次的封装
-
分布式:ES主要是为了突出他的横向扩展能力。
-
全文检索:将一段词语进行分词,并且将分出的单个词语统一的放到一个分词库中,在搜索时,根据关键字去分词库中检索,找到匹配的内容。(倒排索引)
-
RESTful风格的WEB接口:操作ES很简单,只需要发送一个HTTP请求,并且根据请求方式的不同,携带参数的同,执行相应的功能。
-
应用广泛:Github.com,WIKI,Gold Man用ES每天维护将近10TB的数据。
2、 Elasticsearch 相关的基本概念
节点和集群:
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
索引:
索引:是一种存储数据的逻辑概念,并不是查询速度较快的索引
- ES的服务中,可以创建多个索引。
- 每一个索引默认被分成5片存储。
- 每一个分片都会存在至少一个备份分片。
- 备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。
- 备份的分片必须放在不同的服务器中。
文档(Document):
-
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
-
Document 使用 JSON 格式表示
-
同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
类型 Type:
-
一个索引下,可以创建多个类型。
-
根据版本不同,类型的创建也不同。
属性 Field:
- 一个文档中,可以包含多个属性。类似于MySQL表中的一行数据存在多个列。
mysql: 数据库====》数据表===========》数据行=========》字段/列
es : 索引======》类型(Type)=》文档(doc)》属性field
3、索引的操作
-
新建 Index,可以直接向 Elastic 服务器发出 PUT 请求。
# 创建一个索引 PUT /person # "number_of_shards": 5, 当前索引分为5个分片 # "number_of_replicas": 1 每隔主分片,对应一个副本 PUT /person1 { "settings": { "number_of_shards": 5, "number_of_replicas": 1 } }
-
使用GET查看索引信息
# 查看索引信息 GET /person
-
发出 DELETE 请求,删除 Index。
# 删除索引 DELETE /person