文章目录
Elasticsearch学习的第一天
第一章:ES简介
1.1 ES简介
1.1.1 ES定义
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
- Elasticsearch是一款基于Lucene的实时分布式搜索和分析引擎。
- Elasticsearch设计主要用于云计算中,能够达到实时搜索、稳定、可靠、快速,安装使用也非常方便。
- 官方网址:www.elastic.co
1.1.2 ES适用场景
- 1> 站内搜索:主要和Solr竞争,属于后起之秀。
- 2> NoSQL Json文档数据库:主要抢占Mongo的市场,它在读写性能上优于Mongo,同时支持地理位置查询,还方便地理位置和文本混合查询。
- 3> 监控:统计、日志类时间序的数据存储和分析、可视化,这方面是引领者。
- 4> 使用比较广泛的平台ELK:Elasticsearch、Logstash、Kibana
1.1.3 ES适用场景详解
- 场景一: 使用Elasticsearch作为主要的后端
传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力。这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能,如统计。 - 场景二: 在现有系统中增加Elasticsearch
由于ES不能提供存储的所有功能,一些场景下需要在现有系统数据存储的基础上新增ES支持。 - 场景三: 使用Elasticsearch和现有的工具
在一些使用情况下,您不必写一行代码就能通过elasticsearch完成一项工作。很多工具都可以与elasticsearch在一起工作,所以你不必从头开始编写。
例如:假设要部署一个大规模的日志框架存储,搜索,并分析大量的事件。
如下图:处理日志并输出到elasticsearch,可以使用日志记录工具,如rsyslog(www.rsyslog.com),Logstash(www.elasic.co/products/logstash),或者Apache Flume(flume.apache.org)。
搜索和可视化界面分析这些日志,可以使用Kiban。
1.2 ES和MySql的对比
MySql | Elasticsearch |
---|---|
database(数据库) | index(索引库) |
table(biao) | type(类型) |
row(行) | document(文档) |
column(列) | field(字段) |
第二章:REST
2.1 、REST简介
REST全称Representational State Transfer。是一种软件的架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
类似HTTP的访问,和HTTP非常相似。
- Rest操作:
- GET:获取对象的当前状态
- PUT:改变对象的状态
- POST:创建对象
- DELETE:删除对象
- HEAD:获取头信息
2.2 、REST具体操作说明
资源 | 一组资源的URI,如:http://example.com/res/ | 单个资源的URI,如:http://example.com/res/ |
---|---|---|
GET | 列出URL,以及该资源组中每个资源的详细信息(后者可选) | 获取指定资源的详细信息,格式可以自选一个合适的网络媒体类型(如:XML,JSON等) |
PUT | 使用给定的一组资源替换当前整租的资源 | 替换/创建指定的资源。并将其追加到相应的资源组中 |
POST | 在本组资源中创建/追加一个新的资源。该操作往往返回新的URL | 把指定的资源当做一个资源,并在其下创建/追加一个新的元素,使其隶属于当前资源 |
DELETE | 删除整组资源 | 删除指定的元素 |
- URI:uniform resource identifier ,统一资源标识符。用来定位网络上的资源,可以用 http,ftp等协议进行定位。
- URL:uniform resource locator ,统一资源定位符。选用http协议
- 二者关系:URL是URI的子集,URI包含URL。
2.3、ES内置REST接口
URL | 描述 |
---|---|
/index/_search | 搜索指定索引下的数据 |
/_aliases | 获取或操作索引的别名 |
/index/ | 查看指定索引的详细信息 |
/index/type/ | 创建或操作类型 |
/index/_mapping | 创建或操作mapping |
/index/_setting | 创建或操作设置(number_of_shards是不可更改的) |
/index/_open | 打开指定被关闭的索引 |
/index/_close | 关闭指定的索引 |
/index/_refresh | 刷新索引(使新加的内容对搜索可见,不保证数据被写入磁盘) |
/index/flush | 刷新索引(会触发Lucene提交) |
第三章:CURL
3.1 、CURl简介
curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求。简单的可以认为是在命令行下面访问url的一个工具。在centos的默认库里面是有curl工具的,如果没有请yum安装即可。
- -X:指定http的请求方法,有HEAD GET PSOT PUT DELETE
- -d:指定要传输的数据
- -H:指定http请求头信息
3.2 、使用CURL创建索引库、创建索引
3.2.1 创建索引库:
格式:curl -XPUT http://:9200/index_name
PUT或POST都可以创建,例如:
// 创建名称为bigdata的索引库
curl -XPUT 'http://localhost:9200/bigdata?pretty' // pretty反馈给客户端
客户端反馈:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "bigdata"
}
3.2.2 创建索引:
- 演示一:
// 在bigdata索引库下创建一个名为product的type,且在该type下新增一条docment
curl -H 'Content-type:applicaton/json' -XPOST 'http://localhost:9200/bigdata/product/1' -d
'{
"name":"hadoop",
"autor":"smilevers",
"core":["hdfs","mr","yam"],
"latest_version":3.0
}'
- 演示二:
// 在bigdata索引库下创建一个名为product的type,且在该type下新增一条docment,并反馈回客户端
curl -H 'Content-type:applicaton/json' -XPOST 'http://localhost:9200/bigdata/product?pretty' -d
'{
"name":"朱东伟",
"autor":"smilevers",
"latest_version":3.1
}'
3.2.2 ES创建索引注意事项:
- 索引库名称必须全部小写,不能以下划线开头,不能包含逗号
- 如果没有明确指定索引数据的ID,那么es会自动生成一个随机ID,需要使用POST参数
3.3 、PUT和POST操作的区别
- 1> PUT是幂等方法,POST不是。所以PUT用于更新,POST用于新增。
- 2> PUT和DELETE操作是幂等的。幂等是指不管进行多少次操作,结果都一样。比如:用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有什么不同,DELETE也是一样。
- 3> POST操作不是幂等,比如:常见的POST重复加载问题,当我们多次发出同样的POST请求后,其结果是创建了若干的资源。
- 4> 创建可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上(/product),而PUT操作是作用在一个具体的资源之上(/product/1)
3.3.1 全局更新:
一般不建议使用,效果是:将旧的索引信息全部替换为新的索引信息,使用PUT和POST都可以。
- 这些操作都是全局更新,可以理解为先将旧的删除,然后再重新创建一个新的、id相同的索引
// 全局更新操作,PUT和POST都可以 curl -H 'Content-type:applicaton/json' -XPOST 'http://localhost:9200/bigdata/product/1?pretty' -d '{ "autor":"smilevers", "latest_version":3.1 }'
3.3.2 局部更新:
使用_update,同时要表明更新的是source中的doc内容
// 局部更新操作,只能用POST,更新其中的一条或多条记录
curl -H 'Content-type:applicaton/json' -XPOST 'http://localhost:9200/bigdata/product/1/_update?pretty' -d
'{
"doc":{
"autor":"123456",
"latest_version":3.1
}
}'
3.4 、CURL使用查询所有
- 根据ID查询:
curl -XGET http://loaclhost:9200/bigdata/product/1?pretty
- 检索文档中的一部分,显示特定的字段内容:
curl -XGET http://loaclhost:9200/bigdata/product/1?_source=name,author&pretty
- 获取source的数据:
curl -XGET http://loaclhost:9200/bigdata/product/1/_source
- 查询所有:
curl -XGET http://loaclhost:9200/bigdata/product/_search
- 根据条件查询:
curl -XGET http://loaclhost:9200/bigdata/product/_search?q=name:12346
3.5 、CURL删除
根据主键删除:
curl -XDELETE http://loaclhost:9200/bigdata/product/1
说明:如果文档存在,es属性的found:true,successf:1,_version属性+1。如果文档不存在,es属性found:false,但是版本值version依然会+1,这个是内部管理的一部分,它保证我们在多个节点间的不同操作的顺序被正确的标记了。
注意:一个文档被删除后,不会立即生效,只是被标记为已删除。ES将会在你之后添加更多的索引的时候才会在后台删除。