我想,既然你来看这篇文章了,那么应该不用告诉你ElasticSearch是用来做什么的了。
如果你是无意中看了这篇文章,那我也要对你负责。告诉你这篇文章要介绍的对象是谁,它就是ElasticSearch。后面简称ES。
一个基于文档的分布式搜索分析框架。
当前主流的分布式框架具有的属性,它基本上都有,如高性能,高可用。下面我们进入正题,介绍ES中的概念。我们采用MAP的方式来表述。即A:XXX这种。
一、概念梳理
1.Lucene:Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。即,目前最屌的搜索库,只支持java语言,使用复杂。
2.ElasticSearch:简称ES,基于Lucene开发得到,是开源的,使用简单,可拓展。《ElasticSearch权威指南》中如是描述它:
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。
Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。
3.Kibana:ES的配置管理、ES中数据的可视化分析。官方说他:Kibana为您的数据提供了图像,是用于配置和管理Elastic Stack各个方面的可扩展用户界面。
基础相关:
4.JSON:全称为Javascript对象符号(JavaScript Object Notation),JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。它简洁、简单且容易阅读。
以下使用JSON文档来表示一个用户对象:
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
尽管原始的user对象很复杂,但它的结构和对象的含义已经被完整的体现在JSON中了,在Elasticsearch中将对象转化为JSON并做索引要比在表结构中做相同的事情简单的多。
功能相关:
5.document :类比成数据库中的一行数据(一个元组)
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。
ELasticsearch使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。
6.文档元数据:包括_index,_type,_id
7.type:文档代表的对象的类,类比数据库中的表。表是行的集合,type是文档(document)的集合。
8.index:文档存储的地方,类比一个数据库。库是表的集合,index是type的集合。
9.id:文档的唯一标识
架构相关:
10.主要分片(primary shard):用来存放数据的主本
11.复制分片(replica shard):用来存放数据的副本
二、基础操作
1.下载ES和Kibana的安装包。
ES:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.zip
Kibana:https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-windows-x86.zip
2.下载安装1.8.0_73及以上版本的JDK
自己解决
3.启动ES和Kibana
点击解压后的对应文件夹下的bin目录下的elasticsearch.bat和kibana.bat
4.进入操作地址,验证自己是否安装启动成功
ES地址:http://localhost:9200/?pretty
可以用来判断安装是否成功。
kibana地址:http://localhost:5601
用来操作ES和做数据可视化。
5.查看健康状况
进入本地的kibana服务主页
点击左侧导航栏的“Dev Tools”按钮
在Console框的左侧输入区输入:
GET _cat/health?v
输出的内容:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1561536359 16:05:59 elasticsearch yellow 1 1 1 1 0 0 1 0 - 50.0%
6.索引操作
6.1 查看集群中有哪些索引
GET _cat/indices?v
输出:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana FmA7KbNYRleEj9L8x_y-FQ 1 1 1 0 6.3kb 3.1kb
6.2 创建索引:
PUT test_index?pretty
输出:
{
"acknowledged": true,
"shards_acknowledged": true
}
再次查看索引:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana FmA7KbNYRleEj9L8x_y-FQ 1 1 1 0 6.3kb 3.1kb
green open test_index xcNf-RBbR2eFh0whxVgzVw 5 1 0 0 1.2kb 650b
发现多了一条索引信息,没错,它就是我们新创建的。
6.3 删除索引:
DELETE test_index?pretty
输出:
{
"acknowledged": true
}
7.文档的增删改查(CRUD)
7.1创建文档:
PUT /yourindex/yourtype/yourid
{
json数据
}
输出:
{
"_index": "yourindex",
"_type": "yourtype",
"_id": "yourid",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
7.2 查询文档
GET /yourindex/yourtype/yourid
输出:
{
"_index": "ecommerce",
"_type": "product",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "gaolujie yagao",
"desc": "gaoxiao meibai",
"price": 30,
"producer": "gaolujie producer",
"tags": [
"meibai",
"fangzhu"
]
}
}
7.3 替换文档
和创建一个,都使用PUT关键字,没有区别,相当于替换原来的文档。既然是替换,就是说需要一个完整的文档数据了。
PUT /yourindex/yourtype/yourid
{
json数据
}
7.4 更新文档
POST /yourindex/yourtype/yourid/_update
{
"doc":{
"name":"good gaolujie yagao"
}
}
7.5 删除文档
DELETE /yourindex/yourtype/yourid