ElasticSearch

ElasticSearch

  • 1. ElasticSearch
  • 2. 类似框架
    • ① Solr(重量级对手)
    • ② Katta
    • ③ HadoopContrib --大数据相关的东西 (大数据工程师)
    • 3.Solr和ES区别:
  • 4. ES安装及使用说明
    • 4.1安装ES
    • 4.2 健康状态:
  • 5. ES客户端--navicat
    • 5.1 认识restfull
    • 5.2 客户端可选类型
    • 5.3 ES交互方式客户端
  • 6. ES基本操作crud
    • 6.1 ES的基本操作
      • (1) 完成es的crud
      • (2)es的crud
      • (3)es 查询特殊的写法
      • (4)局部修改
      • (5)批量操作---了解
      • (6)批量查询
      • (7)查询条件
    • 6.2 DSL查询与过滤
        • 6.2.1 什么叫DSL
        • 6.2.2 DSL过滤和DSL查询在性能上的**区别**:
      • 6.3 DSL查询
      • 6.4 DSL过滤
  • 7. 安装kibana客户端
  • 8. 安装head客户端

1. ElasticSearch

分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎
KB-MB-GB-TB-PB
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
高度集成化的服务,你的应用可以通过简单的 RESTful API、各种语言的客户端甚至命令行与之
交互。
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它拥有开瓶即饮的效果(安装即可使用)

2. 类似框架

① Solr(重量级对手)

Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。
Solr和ES比较:
Solr 利用 (zookeeper注册中心) 进行分布式管理,支持更多格式的数据(HTML/PDF/CSV),官方提供的功能更多在传统的搜索应用中表现好于 ES,但实时搜索效率低。
ES自身带有分布式协调管理功能,但仅支持json文件格式,本身更注重于核心功能,高级功能多有第三方插件提供,在处理实时搜索应用时效率明显高于solr。

② Katta

基于 Lucene 的,支持分布式,可扩展,具有容错功能,准实时的搜索方案。
优点:开箱即用,可以与 Hadoop (大数据)配合实现分布式。具备扩展和容错机制。
缺点:只是搜索方案,建索引部分还是需要自己实现。在搜索功能上,只实现了最基本的需求。成功案例较少,项目的成熟度稍微差一些。

③ HadoopContrib --大数据相关的东西 (大数据工程师)

Map/Reduce 模式(云计算)的,分布式建索引方案,可以跟 Katta 配合使用。
优点:分布式建索引,具备可扩展性。
缺点:只是建索引方案,不包括搜索实现。工作在批处理模式,对实时搜索的支持不佳。

3.Solr和ES区别:

​ (1)Solr重量级, 支持很多种类型操作,支持分布式式,它里面有很多功能,但是在实时领域上面,没有es好

​ (2)Es 轻量级, 支持json的操作格式, 在实时搜索领域里面做的不错,]如果想使用其他的功能,需要额外安装插件

4. ES安装及使用说明

4.1安装ES

ES服务只依赖于JDK,推荐使用JDK1.7+。
① 下载ES安装包
官方下载地址:https://www.elastic.co/downloads/elasticsearch
本课程以在window环境下,ES 5.2.2版本为例,下载对应的ZIP文件
ElasticSearch_第1张图片② 运行ES
bin/elasticsearch.bat
③ 验证
浏览器访问:http://localhost:9200/

看到上图信息,恭喜你,你的ES集群已经启动并且正常运行

4.2 健康状态:

​ green(最健康) -->主分片和从分片(存储内容)都完好,集群是100%健康
​ yellow -->主分片好的,从分片至少缺少一个,集群还是可以使用,
​ red -->至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据

5. ES客户端–navicat

5.1 认识restfull

​ 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

5.2 客户端可选类型

​ 1)postman + head
前端head比较屌,可以直接看到shard和replica + postman

​ 2)curl–>在firefox安装poster插件
windows支持 安装查询poster, 如果在linux安装也是可以的
火狐的POSTER插件界面

​ 3)Kibana5 -->es推荐

5.3 ES交互方式客户端

① 基于RESTful API
ES和所有客户端的交互都是使用JSON格式的数据.
其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信
Curl命令方式:
默认windows下不支持curl命令,在资料中有curl的工具及简单使用说明。
ElasticSearch_第2张图片
火狐的POSTER插件界面:
类似于Firebug,在火狐的“扩展”中搜索“POSTER”,并安装改扩展工具。
在这里插入图片描述
使用POSTER模拟请求的效果

② Java API
ES为Java用户提供了两种内置客户端:
节点客户端(node client):
节点客户端以无数据节点(none data node)身份加入集群

传输客户端(Transport client):
这个更轻量的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。
两个Java客户端都通过9300端口与集群交互,使用ES传输协议(ES Transport Protocol)。

注意
Java客户端所在的ES版本必须与集群中其他节点一致,否则,它们可能互相无法识别。

6. ES基本操作crud

6.1 ES的基本操作

(1) 完成es的crud

​ index : 索引库 (es) 数据库(database) 索引库 index库(lucene)

​ type : 表(类型) table documents

​ id:某一个条数据 column document(field)

(2)es的crud

#新增
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

(3)es 查询特殊的写法

# 查询所有
GET _search
#漂亮格式
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?pretty

#指定返回的列
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?_source=name,age

#不要元数据 只返回具体数据
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ/_source

(4)局部修改

#修改 --覆盖以前json
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ
{
  "name":"yyyy888"
}

#局部更新
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ/_update
{
  "doc":{
    "name":"baocheng"
    }
}

(5)批量操作—了解

POST _bulk
{ "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "itsource", "_type": "blog", "_id": "123" }}
{ "title": "我发布的博客" }
{ "index": { "_index": "itsource", "_type": "blog" }}
{ "title": "我的第二博客" }

(6)批量查询

普通查询:
GET  crm/employee/id
批量查询:
GET itsource/blog/_mget
{
  "ids" : [ "123", "AW8iQAxERN4d1HhhqMML" ]
}

(7)查询条件

#分页查询
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的人,并查询三条数据

如果上面的查询涉及条件比较多,就不适合使用

6.2 DSL查询与过滤

SQL是关系型数据库查询语言

6.2.1 什么叫DSL

由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。

DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。

DSL分成两部分:

​ DSL查询

​ DSL过滤

6.2.2 DSL过滤和DSL查询在性能上的区别

(1) 过滤结果可以缓存并应用到后续请求。

​ (2) 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。

(3)过滤语句可有效地配合查询语句完成文档过滤。

原则上,使用DSL查询做全文本搜索或其他需要进行相关性评分的场景,其它全用DSL过滤。

6.3 DSL查询

GET crm/student/_search
{
"query": {
   "match_all": {}
},
"from": 0, 
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}

6.4 DSL过滤

#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"}]
}

7. 安装kibana客户端

1)下载

2)安装
解压即可
3)配置
配置服务器地址,编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES
3)启动
ElasticSearch_第3张图片
ElasticSearch_第4张图片

4)测试
浏览器访问 http://localhost:5601
ElasticSearch_第5张图片

8. 安装head客户端

进入head页面 进行安装
解压 head.zip包,url栏输入cmd进入页面
1)安装
下载
npm install --时间有点久
ElasticSearch_第6张图片
npm run start
2)配置
跨域访问
修改 elasticsearch/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: “*”

3)使用
ElasticSearch_第7张图片

你可能感兴趣的:(Dao持久层)