elasticsearch基础笔记-elasticsearch 概况

文件交换 关注

收藏于 : 2019-11-05 21:58   被转藏 : 1   

1、产生背景

1、搜索是人的自然需求

2、海量数据组合条件查询-大数据时代新需求

3、专业的选择不多

2、什么是ES-官方定义

Elasticsearch简称ES,是一个高度可扩展的开源的全文搜索和分析引擎。 它允许你快速,近实时地存储,搜索和分析大量数据。

它通常作为底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。

关键词:易扩展(PB级)、实时、能存能搜能分析

3、优点

(1) 横向可扩展性: 作为大型分布式集群, 很容易就能扩展新的服务器到ES集群中; 也可运行在单机上作为轻量级搜索引擎使用.

(2) 更专业的功能: 与传统关系型数据库相比, ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能.

(3) 分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard), 利用分而治之的思想提升处理效率.

(4) 高可用: 提供副本(Replica)机制, 一个分片可以设置多个副本, 即使在某些服务器宕机后, 集群仍能正常工作.

(5) 开箱即用: 提供简单易用的API, 服务的搭建、部署和使用都很容易操作.

4、两位"朋友"

1、Lucene

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构@1

ElasticSearch是一个基于Lucene的搜索服务器。Lucene专注于搜索底层的建设,而ElasticSearch专注于企业应用。

2、 Solr

Solr是Apache 下的一个开源项目,使用Java基于Lucene开发的全文检索服务是一个独立的企业级搜索应用服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化@2

3、solr和es的对比:

(1)es基本是开箱即用,非常简单。Solr安装略微复杂一丢丢

(2)Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。

(3)Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。

(4)Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑

(5)Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

(6)最被大家诟病的 solr社区完善,参考文章多,es开发者少社区不完善的问题,已经发生很大改变。

3、三者的关系

大众集团的MLB-EVO架构

solr

es

5、应用场景

1. 站内搜索:主要和 Solr 竞争,属于后起之秀

2. NoSQL Json文档数据库:主要抢占 Mongo 的市场,它在读写性能上优于 Mongo ,同时也支持地理位置查询,还方便地理位置和文本混合查询。@4

3. 监控:统计、日志类时间序的数据存储和分析、可视化,这方面是引领者

4. 国外:Wikipedia(维基百科)使用 ES 提供全文搜索并高亮关键字、Stack Overflow(IT问答网站)结合全文搜索与地理位置查询、Github使用Elasticsearch检索1300亿行的代码

5. 国内:百度(在云分析、网盟、预测、文库、钱包、风控等业务上都应用了ES,单集群每天导入30TB+数据,总共每天60TB+)、新浪 、阿里巴巴、腾讯等公司均有对ES的使用

6. 使用比较广泛的平台ELK(ElasticSearch, Logstash, Kibana)

7、招聘情况:小厂:15-25k,大厂:25-40k,java:很多有需要了解这一项的要求

@1:搜索引擎框架和搜索引擎的区别

全文搜索引擎是名副其实的搜索引擎,国外具代表性的有Google、Fast/AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut等,国内著名的有百度(Baidu)。它们都是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户,因此他们是真正的搜索引擎。

从搜索结果来源的角度,全文搜索引擎又可细分为两种,一种是拥有自己的检索程序(Indexer),俗称"蜘蛛"(Spider)程序或"机器人"(Robot)程序,并自建网页数据库,搜索结果直接从自身的数据库中调用,如上面提到的7家引擎;另一种则是租用其他引擎的数据库,并按自定的格式排列搜索结果,如Lycos引擎。

@2:solr和es的区别和对比

Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

@3:关于hermes

Hermes:的使用特点如下:

1. 一个基于大索引技术的海量数据实时检索分析平台。侧重数据分析。

2. 数据规模从几亿到万亿不等。最小的表也是千万级别。在腾讯17 台TS5机器,就可以处理每 天450亿的数据(每条数据1kb左右),数据可以保存一个月之久。

@4:es能否替代mangodb

简单的说,对读多写少的存储es是可以代替mongo的,特别是运行在SSD服务器上时(传统硬盘请不要用aggregation和sort,就算有了doc_values的es2也一样不要用,就算你有再多的内存也不要用)

对于复杂查询,mongo能作到的es也都可以做到。

扩展性方面,两者都很优秀靠谱,es维护起来要稍方便一些。

性能上来说,读方面mongo要比es稍强(都足够快了,一天千万级pv的单服两者都可以轻松顶住,es cpu占用会比mongo稍多),写方面mongo秒杀es,特别是mongo3以后wiredtiger的引入,写性能差距更大,所以如果满足开头说的,那才考虑用es替代mongo。

存储灵活性方面mongo完秒es,用es做主存储时你要想清楚,因为

mapping是不可变!

mapping是不可变!

mapping是不可变!

当需求经常变时候最好用mongo。需求变化时候用es你会想死,数据量少还好,数据量多你能想像一下几亿的数据慢慢scan然后全部重建的痛苦吗?想死的心都有。

es还多出个全文索引功能,当然mongo3也有,但和es比就是个玩笑。

我的这个,数据量差不多1.8T左右。全es,运行良好,除了有一次硬盘爆满了挂一次外,一直运行良好。

最后一点,es现在更多的也被归入nosql一族了而非ir系统,所以两者的界线其实没你想像的明显。

@5:

搜索 分析操作窗口 数据管道 轻量采集 部署安装

日志管理 指标分析 性能检测 定制搜索 交互分析

@6

 阅读文章全部内容  
点击查看
文章点评
相关文章
文件交换 关注

文章收藏:69

TA的最新收藏