Elastic:Beyond Search!

Elastic凭借其核心产品Elasticsearch及ELK堆栈,在大数据实时处理领域崭露头角,解决了搜索速度、相关性和规模化难题,吸引了全球数十万开发者关注,成功上市并创造了开源商业化奇迹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为后端的程序员,如果没有听说过Elastic及其产品Elasticsearch或者ELK,那实在是太Out了,这款分布式的实时搜索和分析引擎自从诞生以来,就受到了众多程序员的青睐,自其第一个公开版本在2010年2月发布之后,Elasticsearch 就成为了Github上最活跃的项目之一,拥有超过736名Contributors。目前,Elasticsearch已经有超过3.5亿的产品下载,一个汇聚100000多名开发人员的社区和超过5500名客户。而就在今年国庆期间,Elastic上市,首日大涨,市值接近50亿美元,创造了一个开源项目商业化的奇迹。

那么,Elasticsearch究竟是一个什么样的开源项目?为什么会受到如此众多程序员和投资者的追捧?Elastic又是如何创造了开源项目商业化的奇迹?也许看完了这篇文章,您就可以找到答案。

搜索传奇

说起Elasticsearch的诞生,很多人可能都听说过那个传奇故事,简单来说,就是一个叫做Shay Banon的失业开发者,想给妻子做一个食谱搜索引擎,可是有心栽花花不开,无心插柳柳成荫。食谱搜索引擎没做成,却创建了一个开源项目Compass,而就是从这个开源项目开始,Shay开创了一段关于搜索的传奇故事。

2004年,Compass诞生。

2010年,Shay重写了Compass,把它变成了著名的Elasticsearch。

2012年,Shay 成立了商业公司Elasticsearch 。

2014年,成立公司仅仅18月以后,获得7000万美金的融资。

2015年,Elasticsearch改名为Elastic ,其主要产品已经从单纯的Elasticsearch变为ELK(Elasticsearch,Logstash和Kibana)。

2018年,Elastic成功上市,市值达到惊人的50亿美金。

这个商业奇迹开始的传奇故事虽然无从考证其真伪,但Shay开发Elasticsearch的初衷是为了解决如何更快速、更简单的搜索的事情确实是板上钉钉的事实。如果你接触过其他搭建搜索引擎的工具,再使用Elasticsearch ,你就会不禁惊讶于它的简单,惊讶于它怎能如此轻松的就可以把一个搜索引擎搭建起来,而且还是分布式的!底层复杂的细节都被隐藏,对外暴露的只是简单而清晰的API以及大量丰富多样的插件。

尽管如此,但一家只是做小工具的公司能够在短短几年时间上市,并且市值一度达到50亿美金,这确实让很多人大跌眼镜,这也是很多人把Elastic的成功描述成“奇迹”或者“传奇”的原因。不过,任何成功都绝不是偶然得来的,Elastic的成功自然也不例外。

Elastic中国区总经理王刚向老孙总结了Elastic成功的几个关键原因。他表示,第一,Elastic是一家开源的公司,这是很重要的一点。正因为开源,Elastic才能发展如此之快,因为大量开源社区的粉丝和用户,在推动Elastic产品的不断发展。王刚介绍,Elastic的员工总共才一千多人,不可能仅凭自己的研发人员就能够研发出一个超一流的世界级产品,因此,Elastic更多凭借的是社区中的小伙伴和开发者,采用共享开发的模式,不断推动着产品的发展。王刚认为,正是这种不同于其他厂商的开发模式,才打造出了Elastic世界一流的产品,造就了Elastic的飞速发展。

第二,Elasticsearch确实是实实在在的解决了现在大数据时代一个很棘手的问题——搜索。现在大数据很流行,但是大数据的流行场景里最常见的业务场景实际上是查询,比如坐飞机需要刷身份证,坐火车也要刷身份证,而刷身份证的目的就是要去查证这个人是否有不良的记录,这实际上就是查询。因此,查询一定是大数据时代一个刚性需求,而且有很大的业务应用场景。但是,遗憾的是,并没有一个特别好的大数据解决方案能够解决这个问题。主要的原因在于,在做大数据查询和分析时,大多数应用场景是实时的应用场景,实时应用场景的要求就是快,即在尽量短的时间里得到查询和分析的结果,但这是市面上绝大多数大数据产品都缺乏的。而Elasticsearch就抓住了这个大数据时代的刚需——实时化,也就是说,它可以实时的反馈查询和分析的结果,从而解决了令众多用户头痛的实时查询问题,此外,Elastic还为用户提供了一整套的组件,包括搜索引擎,数据分析,数据导入工具,用户可以基于Elasticsearch搜索引擎简单快速的打造出一个实时大数据分析展现解决方案,所以Elastic一下子就火起来了。

第三,是Elastic的商业模式。开源项目很尴尬的一个问题,是很多产品叫好不叫座,好多人用,却没人付钱。Elastic的商业模式与传统开源项目的商业模式不太一样,Elastic自己称为第二代开源模式。第一代开源模式可能更像红帽,这个模式的特点是开源项目一般分为社区版和企业版,社区版免费,但如果用户需要技术支持,就需要转成收费的企业版。Elastic则没有免费版和企业版之分,只有一个版本,它的商业模式类似于游戏的内购系统,核心的部分是免费的,但开源部分周边的插件,是需要付费的。就好比玩王者荣耀是免费的,但购买装备是要掏钱的道理是一样的。同时,由于只有一个版本,版本的更新和维护也变得很简单。而这个商业模式上看似不大的一点点差别,却使用户从免费到付费的过程变得非常自然和简单,如果用户付费,就可以获得更多的功能,如果不付费,用户还是可以继续沿用那些免费开源的部分,这就造就了Elastic与其他开源公司不一样的地方。

最后,虽然Elastic公司不大,但是它拥有很多以前在大公司具有丰富经验的职业经理人,因此,它的管理经验,管理体系的成熟度,比许多大公司还要好。许多大公司的管理都是慢慢摸索出来的,Elastic不需要,它的很多管理体系都是直接从一些知名的大公司搬过来,并进行改良和优化,使它更适合小机构,小体系。

所以说,Elastic差异性的商业模式,成熟的管理模式以及优秀的产品,最终造就了Elastic火箭一般的快速发展,缔造了一个堪称奇迹的开源项目商业化的传奇。

超越搜索

不过,如果仅仅把Elastic看成一家搜索公司,那就有失偏颇了,按照Elastic的官方说法,Elastic的定位是解决大数据实时处理业务场景解决方案的提供商,Shay也多次强调,他之所以开发Elasticsearch就是要使世界上每个开发人员能够把搜索作为基础设施来解决他们最复杂的需求。

从这些话语中,可以看到,Elastic并没有把自己仅仅定位在搜索引擎领域。而从Elastic的产品的架构来看,Elastic实际上解决的是大数据处理的三个维度的问题。

第一,相关性。大数据时代,数据量呈爆炸式的增长,在这种情况下,数据类型也会非常多变,比方说有数据库的数据,有存储的数据,有防火墙的数据,CDN的数据,有中间件的数据,有业务数据,交易数据等很多数据,随着未来的发展还会有云端的数据,传感器的数据,机器的数据等等。如果想把这么多数据类型的数据统一进行分析加工处理,你会发现没有一套系统能够把所有的数据类型处理好。有些系统处理文本数据可以,有些处理音频数据可以,有些处理时序性数据可以,但却没有一个单一的平台可以把所有的数据都能够统一分析和管理起来。比如说滴滴打车系统中,就会用到消费者的信息,出租车的信息、地理位置的信息还有支付的信息等等,而要把这些信息数据放在一个平台上去处理和分析,就会发现很多系统是无法解决的,而对于滴滴打车这种应用,又必须把这些数据放在同一个系统里去分析和处理,才能实现叫车的需求,这就是数据的相关性。而Elasticsearch则允许执行和合并多种类型的搜索 ( 结构化、非结构化、地理位置、度量指标 ),Elasticsearch 聚合还能够从大处着眼,探索数据的趋势和模式,从而帮助用户一举解决在同一平台分析和处理数据的需求。

第二,速度。还是回到滴滴打车,如果用户需要叫车,明明有车,并且就在用户家门口,但系统速度很慢,需要很长时间才能叫到车,这将会严重影响到用户体验。所以,在当今的时代,速度非常重要,很多交易、行为、业务环节都需要秒级处理,比如去淘宝上买东西,搜索产品,如果无法在几秒内出现结果,用户将是无法忍受的。Elasticsearch通过有限状态机实现了用于全文检索的倒排索引,实现了用于存储数值数据和位置数据的BKD 树以及用于分析的列式存储。而且由于每个数据都被编入了索引,因此可以用快到令人惊讶的速度搜索到所有数据。

第三,规模化。随着数据量越来越大,对数据处理的难度也将愈来愈大,但许多系统在设计时,并没有充分考虑系统的扩展性,就像各大城市的交通系统,在当初规划的时候,是无法想象现今车辆的增长速度的,因此,规划总赶不上车辆增长的速度,交通拥挤也就在所难免了。同样,如果当时设计大数据分析和处理系统时,是按照千万级别用户量去设计的话,一旦用户量超过限度,那就有问题了。所以系统是否能够平滑支持升级、扩容、扩展就变得很非常重要。而Elasticsearch 运行在一个分布式的环境中,从设计之初就考虑到了这些问题,无论在一个节点上运行,还是在一个包含300 个节点的集群上运行,都能够以相同的方式与Elasticsearch 进行通信。Elasticsearch能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,以实现极其流畅的操作。

而Elastic之所以能够解决大数据处理的相关性、速度、规模化的三大问题,则要归功于Elastic的几项核心开源组件。第一,Elastic Stack,这是一套系统堆栈,第二,最核心的Elasticsearch搜索引擎,它包括了倒排索引,列式存储等。第三,数据导入工具,Beats和Logstash,Beats 是轻量型采集器的平台,从边缘机器向Logstash 和Elasticsearch 发送数据。Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与Elasticsearch产生强大的协同作用。第四,数据展现工具Kibana ,它能够以图表的形式呈现数据,并且具有可扩展的用户界面,全方位配置和管理Elastic Stack。这些核心开源的四个组件,就是大家熟知的ELK或者ELKB。

Elastic这些开源组件极大方便了广大企业客户大数据平台的搭建。越来越多的企业和机构将elastic stack(简称ES)用于日志分析,业务数据分析,安全分析,企业内网搜索,网站和APP搜索等业务场景。很多行业客户也将ES用于行业的深度应用,例如银行业的反洗钱应用,信用卡防欺诈,金融客户智能产品推荐等,汽车行业的车联网和IoT等等。为了广大企业和机构的深度应用和服务的需求,elastic也推出更多的付费高级商业插件和原厂5*8或者24*7的服务,例如安全权限管理,提醒功能,报警功能,报表功能,图关联查询功能,机器学习功能等。这个商业插件和原厂服务构成了elastic的商业产品即商业订阅。这些付费的商业订阅可以让客户更安全,更智能,更高效的去部署实施elastic stack的集群。对于已经大量使用elastic的客户,还可以考虑ECE(Elastic Cloud Enterprise)企业云,可以将过去头疼的集中管控,自动分配资源,系统升级维护等问题,统一交给ECE来完成。Elastic还提供本地化的技术培训和咨询服务,更好帮忙国内客户提升自己的大数据能力和项目质量,真正能从Elastic Stack中获取到价值。

期待中国

虽然Elastic在开发者,尤其是中国开发者群体中如日中天,而且从Elastic的使用量上来说,前二十名使用量的用户中至少有十家在中国,但实际上,直到今年3月,Elastic才在中国设立分公司。就像许多美国公司一样,Elastic美国总部对中国充满了好奇,也充满了期望。中国经济对他们来讲是一个奇迹,而中国互联网公司对Elastic的海量用量则更加加剧了这种好奇和期待感。既然有如此多的人在使用Elastic,那这个市场一定很大,充满无限潜力,这令Elastic充满期待。但中国市场究竟应该怎么去做,能给Elastic带来多少商业回报,有多少人会买单,有多少人需要Elastic的服务,又令Elastic充满了好奇。所以这也就是为什么在今年Elastic发展到一定规模之后,决定在中国开设分公司,并进行投资的原因。

而这种投入,其实也是释放一个信号,即Elastic非常看重中国市场,它觉得既然中国市场有这么多用户在用,那么,这些用户一定需要帮助,无论它是否付钱,有没有预算,有没有经费,但是他们一定需要帮助,一定有人用的好,有人用的很痛苦,也一定有人虽然会使用,但并没有把Elastic的价值充分发挥出来,而这也是Elastic对中国市场比较看重的一点。

但王刚坦言,开拓中国的市场,可能还需要很长的路。虽然Elastic的商业模式非常清晰,但是从营销上来讲,在一个区域国家,特别是文化与美国文化有极大差别的一个国度,怎么去迎合客户,获取客户,让客户满意,同时愿意付费,这一定是与美国的方法是有所区别的,而这些都需要时间去摸索。不过,Elastic美国总部对于中国市场的重视是的的确确的,对Elastic中国团队也是非常信任,也给予了比较大的投入和时间窗,同时,对中国也是充满了等待,并保持足够的耐心。

再续传奇

区别于传统的通用搜索引擎,Elastic在企业内搜索技术领域无疑是独步天下的王者,凭借出色的产品、创新的商业模式以及开放的生态,Elastic正一步一步向着Elastic的缔造者Shay心中的愿景——使世界上每个开发人员能够把搜索作为基础设施来解决他们最复杂的需求——稳步迈进,而伴随着诸如Elastic Cloud、Elastic Cloud Enterprise等云端产品的推出,Elastic一定会延续它的传奇之旅。

### Java Elasticsearch BBOSS Framework Example Usage and Documentation #### Introduction to BBoss-Elasticsearch BBoss-Elasticsearch represents a powerful high-level REST client API designed specifically for interacting with Elasticsearch using Java. This tool simplifies the process of integrating Elasticsearch into applications by providing an intuitive interface that abstracts away much of the complexity involved in direct HTTP requests or lower-level clients[^1]. The official project repository can be found at [this link](https://gitcode.com/gh_mirrors/bb/bboss-elasticsearch), where developers may explore source code, contribute improvements, report issues, and access comprehensive documentation. #### Basic Configuration and Setup To begin working with BBoss-Elasticsearch within a Java application, one must first include it as a dependency in their build configuration file (Maven POM.xml or Gradle). Afterward, configuring connections involves setting up properties such as cluster name, node addresses, port numbers, etc., which are typically stored inside `application.properties` or equivalent files depending on your environment setup[^3]. For instance, here's how you might configure connection settings: ```properties # application.properties es.cluster.name=elasticsearch_cluster_name es.node.host=localhost es.node.port=9300 ``` #### Code Examples Demonstrating Common Operations ##### Indexing Documents Index operations allow storing documents into specified indices so they become searchable later on. Below demonstrates indexing JSON-formatted data through BBoss-Elasticsearch APIs: ```java // Import necessary packages from org.frameworkset.elasticsearch.client package. import org.frameworkset.elasticsearch.client.DataStream; import org.frameworkset.elasticsearch.entity.ESDatas; public class ElasticSearchExample { public static void main(String[] args){ try{ // Initialize DataStream object associated with target index type. DataStream stream = new DataStream("index_type"); // Prepare document content represented as Map<String,Object>. Map<String, Object> docContent = Maps.newHashMap(); docContent.put("field", "value"); // Perform actual insert operation via add method call. String id = stream.add(docContent); System.out.println("Document inserted successfully with ID:" +id); }catch(Exception e){ e.printStackTrace(); } } } ``` ##### Searching Indexed Data Once documents have been indexed properly, performing searches becomes straightforward thanks to built-in query builders provided by BBoss-Elasticsearch library functions like matchQuery(), termQuery() among others. Here’s an example showing basic keyword matching against specific fields: ```java try{ // Create QueryBuilder instance representing desired search criteria. BoolQueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery("title","example")) .filter(QueryBuilders.termQuery("status","published")); // Execute search request over given index/type combination. ESDatas<Map> result = esClient.search(qb,"index_name","type_name"); // Iterate over returned hits collection printing out each hit's _source field value. List<HitInfo<Map>> list = result.getHits(); for(HitInfo<Map> item :list){ System.out.println(item.getSource()); } }catch(Exception ex){ ex.printStackTrace(); } ``` --related questions-- 1. How does BBoss-Elasticsearch compare performance-wise compared to other available options? 2. What kind of support exists around maintaining compatibility between different versions of Elasticsearch and BBoss-Elasticsearch? 3. Are there any particular features unique only to BBoss-Elasticsearch not present elsewhere? 4. Can someone provide more detailed explanations regarding advanced configurations beyond simple property definitions?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值