一.简介
1.ElasticSearch:
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
2.Lucene与ES关系
(1)Lucene只是一个库。要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,另外,Lucene非常复杂,需要深入了解检索的相关知识来理解它是如何工作的。
(2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
3.ES主要解决问题
(1)检索相关数据;
(2)返回统计结果;
(3)速度要快。
4 ES工作原理
当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。这个过程如下图所示:
5.ES核心
(1)Cluster:集群
ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。
(2)Node:节点
形成集群的每个服务器称为节点。
(3)Shard:分片
- 当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
- 当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的.
(4)Replia:副本
- 为提高查询吞吐量或实现高可用性,可以使用分片副本。
- 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
- 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
(5)全文检索
- 全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
- 全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。
6.ES特点和优势
(1)分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。
(2)实时分析的分布式搜索引擎。
- 分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作;
- 负载再平衡和路由在大多数情况下自动完成。
(3)可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。也可以运行在单台PC上(已测试)
(4)支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。
二.Solr
1.简介
(1)Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器。
(2)Solr比lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对lucene的性能进行了优化。
2.索引流程:
solr客户端(浏览器、java程序)可以向solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,solr实现对索引的维护(增删改)
3.搜索流程:
solr客户端(浏览器、java程序)可以向solr服务端发送GET请求,solr服务器返回一个xml文档。
4.Solr和lucene的区别
(1)Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。
(2)Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比lucene在开发全文检索功能时,更快捷、更方便。
今天是我在千锋线上学习的第56天,加油!!!