在这之前,我并不是很了解Elasticsearch,也是偶然看文章的时候刷到Elasticsearch一词,但并没有深究,仅仅知道有这么个东西存在,它可以来做搜索的,今天借着ES三周年活动来了解一下。
Elasticsearch是何许人也?
在对Elasticsearch没有任何了解的情况下,第一步肯定就去百度一下喽!
结果:
腾讯云 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管的 Elasticsearch 服务,包含 Kibana 及常用插件,并集成了安全、SQL、机器学习、告警、监控等高级特性(X-Pack)。
可结果不尽人意,说了等于没说,或者说不知道说了个啥!是不是跟我一样一脸懵逼,哈哈!啥叫高可用?啥叫可伸缩?艹
遇到这种太官方的话,我一般就继续搜,看看有没有什么白话文,如果实在没有就多看看其他小伙伴的理解,然后自己再总结总结。
这里的高可用
其实是指的是Elasticsearch Service给我们提供了多个部署方案,可以保障任何因素造成的故障而不停服,COS 数据备份策略可以定时备份数据,保障数据因意外情况有丢失时快速恢复。此外还有为保障集群稳定而进行的内核优化等策略,可以全方位地保障数据的安全和服务的稳定。
而可伸缩
指的是Elasticsearch Service提供了多种类型的节点规格和存储介质,我们可以根据公司业务需要进行选择,随着业务的发展,是可以动态调整集群的配置扩容或缩容,实时保障业务的发展需要,并有效控制成本。
大概总结一下:
Elaticsearch,简称为ES,ES是一个分布式全文检索引擎,它不仅可以实时存储数据,还可以检索数据,它的扩展性是很不错的,也就是前面提到的可伸缩
,可以扩展到上百台服务器,处理PB级别的数据。ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,其实Elaticsearch底层依然是Lucene,说白了Elaticsearch就是在Lucene外面套了一层壳,让我们免去一些繁琐的操作,从而变得容易上手一些。
有一个搜索引擎的排名,Elasticsearch的排名是非常高的,大家可以点击下面的链接查看
请点击: 搜索引擎的排名
缘起——Lucene
Lucene是基于java语言开发的搜索引擎库类,创建于1999年,2005年成为Apache 顶级开源项目,
Lucene具有高性能、易扩展的优点,但也有局限性,比如:只能基于Java语言开发、类库的接口学习曲线陡峭、原生并不支持水平扩展,这时Elasticsearch诞生了。
诞生
Elasticsearch是构建在 Lucene之上的开源分布式搜索引擎。2004年 Shay Banon 基于Lucene开发了Compass。2010年 Shav Banon重写了Compass,取名Elasticsearch,支持分布式,可水平扩展。
降低全文检索的学习曲线,可以被任何编程语言调用。Elasticsearch 与 Lucene 核心库竞争的优势在于完美封装了 Lucene 核心库,设计了友好的 Restful-API,开发者无需过多关注底层机制,直接开箱即用。分片与副本机制,直接解决了集群下性能与高可用问题。
没有对比就没有伤害:Elaticsearch VS solr
Solr 是第一个基于 Lucene 核心库功能完备的搜索引擎产品,出现时间远早于 Elasticsearch。如果单纯的对已有数据进行搜索时,Solr更快。
Elaticsearch 和 solr 都是基于Lucene,都是对Lucene的封装。Elaticsearch和solr也都是非常优秀的工具,只是针对不同的场景,拥有不同的优势。择良木而栖即可!
对比:
- Elasticsearch 在实时搜索应用中表现好于 Solr,但在处理普通搜索应用时效率明显高于 Elasticsearch
- Elasticsearch 仅仅支持json文件格式,而 Solr 支持更多格式的数据,比如JSON、XML、CSV。
- 随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch是没有明显的变化
有何使用场景?
- 搜索
搜索在日常生活中也是很常见的,像购物商城中商品的搜索,软件应用商城以及企业内部的搜索等海量数据下的站内搜索服务是高效获取信息的必要途径,腾讯云 Elasticsearch Service 拥有全文检索功能,对结构化和非结构化数据都有良好的支持,同时还提供了简单易用的 RESTful API 和各种语言的客户端,方便用户快速搭建稳定的搜索服务,整合到已有到业务框架中。 一句话:有搜索的地方就可以用它!
国内现在有大量的公司都在使用 Elasticsearch,像滴滴、今日头条、饿了么、360安全等知名公司。除了搜索之外,它可以结合Kibana、Logstash、Beats,Elastic Stack用在大数据实时分析平台,分析一些日志、指标监控等领域。
- 日志管理与分析
网站服务器、移动设备、IoT 传感器等设备产生的日志,存在着节点分散、种类多样、规模庞大等问题,这对需要通过日志搜索,进行异常问题定位和业务分析等工作造成了很大的挑战。腾讯云 Elasticsearch Service 提供了弹性可扩展、准实时的集中式存储方案,以及全文搜索功能,方便日志的统一管理和查询,帮助用户快速定位和发现问题,提高解决问题的效率。
ES的应用十分广泛,比如维基百科、Github、新浪等都使用ES实现搜索。
开始安装
直接去官网下载ES:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.zip
解压后会得到如下一个目录:
目录名称 |
主要的作用 |
---|---|
bin |
bin目录下放的都是一些启动命令,也就是脚本,在windos下用什么命令,在Linux使用什么命令 |
config |
config存放的是ES服务器的配置文件 |
lib |
存放的是库文件jar包 |
modules |
这里是一些扩展的模块 |
plugins |
关于ES的插件可以放这里 |
解压完成后直接在bin目录下找到Elasticsearch文件,双击即可,当看到started启动成功, 默认9200端口;
ES中一些概念
- 索引index
索引就是一个拥有相同属性的文档集合。也可以认为是type的集合,我们在搜索,更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的系引。
- 类型type
在一个索引中,可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定,一般会为具有一组共同字段的文档定义一个类型。类比到数据库上相当于表
- 字段field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
- 文档document
文档用JSON格式来表示,它相当于数据库中表的一条数据
- 映射 mapping
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,对于数据库来说就是表结构的定义。
- 集群cluster
一个集群是由一个或多个节点组织在一起,它们共同拥有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是”elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。