虽然全文搜索领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene的配置及使用非常复杂,你需要深入了解检索的777相关知识来理解它是如何工作的。
es : 做全文检索的 ,底层基于lucene的开发
lucene 相等于jdbc
es 相当于 mybatis/jpa
ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,其第一个版本于2010年2月出现在GitHub上并迅速成为最受欢迎的项目之一。
首先,ES的索引库管理支持依然是基于Apache Lucene™的开源搜索引擎。
ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
不过,ES的核心不仅仅在于Lucene,其特点更多的体现为:
分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎 --ES
KB-MB-GB-TB-PB
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
高度集成化的服务,你的应用可以通过简单的 RESTful API、各种语言的客户端甚至命令行与之
交互。
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它拥有开瓶即饮的效果(安装即可使用),只需很少的学习既可在生产环境中使用
为什么需要使用es.为什么不用lucene?
(1)api操作很麻烦 不方便
搜索 : 创建索引 搜索索引 一堆api
es: get /product/1 – {}
(2)lucene不支持集群
es集群 处理很大的数据量
es 和 solr 都可以做全文检索,solr的重量级的框架,它除了全文检索以外,还可以做其他的事情(比如
命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)),solr可以nosql结合起来使用
solr 在传统的搜索效率要比es好,但是实时搜索领域比es低
ES服务只依赖于JDK,推荐使用JDK1.7+
下载ES安装包
官方下载地址:https://www.elastic.co/downloads/elasticsearch
解压–>bin/elasticsearch.bat–>浏览器访问 http://localhost:9200/
9200web里面展示的效果 9300java程序可以访问的端口
运行ES
bin/elasticsearch.bat
当看到上图就说明ES集群已经启动并且正常运行
基于restful风格API的去操作
ES和所有客户端的交互都是使用JSON格式的数据.
其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信
get post put delete patch
curl的命令方式 --不用
kibana也可以操作
head工具
安装的时候,如果出现错误:
通过java代码去操作
java通过9300操作es服务器
http特点 就是无状态的
get /shopping/1
put /shopping/2 {“name”:“xx产品”}
post /shopping/2 {“name”:“xx产品”}
delete /shopping/1
Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作
透明性,暴露资源存在。
充分利用 HTTP 协议本身语义。
无状态,这点非常重要。在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
HTTP 本身提供了丰富的内容协商手段,无论是缓存,还是资源修改的乐观并发控制,都可以以业务无关的中间件来实现
Server提供的RESTful API中,URL中只使用名词来指定资源。
“资源”是REST架构或者说整个网络处理的核心。比如:
GET http://api.itsource.cn/emp/323
: 获取323号员工的基本资料;
GET http://api.itsource.cn/emps
: 获取源码时代所有员工资料列表;
REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露
URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
比如:左边是错误的设计,而右边是正确的
GET/rest/api/getDogs
-> GET /rest/api/dogs
获取所有小狗狗
GET /rest/api/addDogs
-> POST/PUT /rest/api/dogs
添加一个小狗狗
POST /rest/api/editDogs/12
-> PUT/POST /rest/api/dogs/12
修改一个小狗狗
POST /rest/api/deleteDogs/12
-> DELETE /rest/api/dogs/12
删除一个小狗狗
左边的这种设计,很明显不符合REST风格,URI 只负责准确无误的暴露资源,而 getDogs/addDogs…已经包含了对资源的操作,这是不对的。相反右边却满足了,它的操作是使用标准的HTTP动词来体现。
用HTTP协议里的动词来实现资源的添加,修改,删除等操作。
即通过HTTP动词来实现资源的状态扭转:
GET 用来获取资源,
POST 用来新建资源(也可以用于更新资源),
PUT 用来更新资源,
DELETE 用来删除资源。
比如:
GET http://api.itsource.cn/emp/323
POST http://api.itsource.cn/emp/232: 修改一个员工
PUT http://api.itsource.cn/emp: 添加员工资料
DELETE http://api.itsource.cn/emp/323: 删除323号员工
Kibana5.2.2下载地址:https://www.elastic.co/downloads/kibana
解压并编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES
启动Kibana5 : bin\kibana.bat
默认访问地址:http://localhost:5601
Discover:可视化查询分析器
Visualize:统计分析图表
Dashboard:自定义主面板(添加图表)
Timelion:Timelion是一个kibana时间序列展示组件(暂时不用)
Dev Tools :Console(同CURL/POSTER,操作ES代码工具,代码提示,很方便
Management:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性。
(1)Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级
(2)Index:索引库,包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。比如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。
(3)Type:类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。
(4)Document&field:文档,es中的最小数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以去存储多个document。一个document里面有多个field,每个field就是一个数据字段。
(5)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常
(6)Node:节点,集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群
(7)shard(ʃɑːrd,分片):单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
(8)replica(ˈreplɪkə,复制品):任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。
https://www.elastic.co/downloads/elasticsearch
正常请求我们应该在linux或者Docker安装,但是现在我们是学习阶段,就在window上面进行安装
解压即可
可以修改内存配置
bin/elasticsearch.bat
http://localhost:9200
针对一个索引,Elasticsearch 中其实有专门的衡量索引健康状况的标志,分为三个等级:
green,绿色。这代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow,黄色。所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的分片消失,你就会丢数据了。所以可把 yellow 想象成一个需要及时调查的警告。
red,红色。至少一个主分片以及它的全部副本都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。如果你只有一台主机的话,其实索引的健康状况也是 yellow,因为一台主机,集群没有其他的主机可以防止副本,所以说,这就是一个不健康的状态,因此集群也是十分有必要的