分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎
KB-MB-GB-TB-PB
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
高度集成化的服务,你的应用可以通过简单的 RESTful API、各种语言的客户端甚至命令行与之
交互。
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它拥有开瓶即饮的效果(安装即可使用)
Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。
Solr和ES比较:
Solr 利用 (zookeeper注册中心) 进行分布式管理,支持更多格式的数据(HTML/PDF/CSV),官方提供的功能更多在传统的搜索应用中表现好于 ES,但实时搜索效率低。
ES自身带有分布式协调管理功能,但仅支持json文件格式,本身更注重于核心功能,高级功能多有第三方插件提供,在处理实时搜索应用时效率明显高于solr。
基于 Lucene 的,支持分布式,可扩展,具有容错功能,准实时的搜索方案。
优点:开箱即用,可以与 Hadoop (大数据)配合实现分布式。具备扩展和容错机制。
缺点:只是搜索方案,建索引部分还是需要自己实现。在搜索功能上,只实现了最基本的需求。成功案例较少,项目的成熟度稍微差一些。
Map/Reduce 模式(云计算)的,分布式建索引方案,可以跟 Katta 配合使用。
优点:分布式建索引,具备可扩展性。
缺点:只是建索引方案,不包括搜索实现。工作在批处理模式,对实时搜索的支持不佳。
(1)Solr重量级, 支持很多种类型操作,支持分布式式,它里面有很多功能,但是在实时领域上面,没有es好
(2)Es 轻量级, 支持json的操作格式, 在实时搜索领域里面做的不错,]如果想使用其他的功能,需要额外安装插件
ES服务只依赖于JDK,推荐使用JDK1.7+。
① 下载ES安装包
官方下载地址:https://www.elastic.co/downloads/elasticsearch
本课程以在window环境下,ES 5.2.2版本为例,下载对应的ZIP文件
② 运行ES
bin/elasticsearch.bat
③ 验证
浏览器访问:http://localhost:9200/
看到上图信息,恭喜你,你的ES集群已经启动并且正常运行
green(最健康) -->主分片和从分片(存储内容)都完好,集群是100%健康
yellow -->主分片好的,从分片至少缺少一个,集群还是可以使用,
red -->至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据
restfull风格 —> GET/POST/DELETE/PUT shop/goods/1
GET shop/goods/1 -->查询shop这个库goods表 1这条数据
PUT shop/goods {“name”:“111”}
POST shop/goods {“name”:“111”}
DELETE shop/goods/1
1)postman + head
前端head比较屌,可以直接看到shard和replica + postman
2)curl–>在firefox安装poster插件
windows支持 安装查询poster, 如果在linux安装也是可以的
火狐的POSTER插件界面
3)Kibana5 -->es推荐
① 基于RESTful API
ES和所有客户端的交互都是使用JSON格式的数据.
其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信
Curl命令方式:
默认windows下不支持curl命令,在资料中有curl的工具及简单使用说明。
火狐的POSTER插件界面:
类似于Firebug,在火狐的“扩展”中搜索“POSTER”,并安装改扩展工具。
使用POSTER模拟请求的效果
② Java API
ES为Java用户提供了两种内置客户端:
节点客户端(node client):
节点客户端以无数据节点(none data node)身份加入集群
传输客户端(Transport client):
这个更轻量的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。
两个Java客户端都通过9300端口与集群交互,使用ES传输协议(ES Transport Protocol)。
注意
Java客户端所在的ES版本必须与集群中其他节点一致,否则,它们可能互相无法识别。
index : 索引库 (es) 数据库(database) 索引库 index库(lucene)
type : 表(类型) table documents
id:某一个条数据 column document(field)
#新增
PUT crm/employee/1
{
"name":"xxxx",
"age":18
}
#查询
GET crm/employee/1
#修改
POST crm/employee/1
{
"name":"yyyy",
"age":28
}
#删除
DELETE crm/employee/1
#没有指定id 字段生成id
POST crm/employee
{
"name":"yyyy",
"age":28
}
# AW8iLW-mRN4d1HhhqMMJ
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ
GET _search
# 查询所有
GET _search
#漂亮格式
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?pretty
#指定返回的列
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?_source=name,age
#不要元数据 只返回具体数据
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ/_source
#修改 --覆盖以前json
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ
{
"name":"yyyy888"
}
#局部更新
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ/_update
{
"doc":{
"name":"baocheng"
}
}
POST _bulk
{ "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "itsource", "_type": "blog", "_id": "123" }}
{ "title": "我发布的博客" }
{ "index": { "_index": "itsource", "_type": "blog" }}
{ "title": "我的第二博客" }
普通查询:
GET crm/employee/id
批量查询:
GET itsource/blog/_mget
{
"ids" : [ "123", "AW8iQAxERN4d1HhhqMML" ]
}
#分页查询
GET crm/student/_search?size=3
GET crm/student/_search?from=2&size=2
#根据条件查询 --如果条件比较多 就不适合
GET crm/student/_search?q=age:200 表示查询age=200的人
GET crm/student/_search?size=3&q=age[200 TO 800] 查询age范围到200到800的人,并查询三条数据
如果上面的查询涉及条件比较多,就不适合使用
SQL是关系型数据库查询语言
由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
DSL分成两部分:
DSL查询
DSL过滤
(1) 过滤结果可以缓存并应用到后续请求。
(2) 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。
(3)过滤语句可有效地配合查询语句完成文档过滤。
原则上,使用DSL查询做全文本搜索或其他需要进行相关性评分的场景,其它全用DSL过滤。
GET crm/student/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}
#DSL过滤 --> name = 'tangtang' --支持缓存
#select * from student where name=tangtang and age = 500
GET crm/student/_search
{
"query": {
"bool": {
"must": [
{"match": {
"name": "tangtang"
}}
],
"filter": {
"term":{"age":500}
}
}
},
"from": 0,
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}
#select * from student where age = 500 and name != 'tangtang'
GET crm/student/_search
{
"query": {
"bool": {
"must_not": [
{"match": {
"name": "tangtang"
}}
],
"filter": {
"term":{"age":500}
}
}
},
"from": 0,
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}
1)下载
2)安装
解压即可
3)配置
配置服务器地址,编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES
3)启动
4)测试
浏览器访问 http://localhost:5601
进入head页面 进行安装
解压 head.zip包,url栏输入cmd进入页面
1)安装
下载
npm install --时间有点久
npm run start
2)配置
跨域访问
修改 elasticsearch/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: “*”