ES-什么是elasticsearch

前言

观今宜鉴古,无古不成今。
在学习elasticsearch之前,我们要知道,elasticsearch是什么?为什么要学习elasticsearch?以及用它能干什么?

关于elasticsearch

现在,你还离得开搜索吗?无论是Google还是百度提供的搜索入口,还是项目自己的搜索,比如QQ提供的搜索入口等等,都大大的方便了我们的工作、生活。但是你有没有想过——搭建属于自己的搜索服务,应用于你的博客项目、公司项目……
无论你想不想,都要学习!因为随着公司业务的增长,数据也爆炸性增长。对于数据的处理、日志分析,如果还采用传统的方法,这恐怕是灾难性的。所以,我们是时候学习一个先进的搜索引擎了。
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
你以为这些就完了?elasticsearch除了Lucene和全文搜索,我们还可以描述它:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据。

并且,这些功能都被集成到一个服务里面,elasticsearch也提供的与其它语言的接口,其中包括:

  • Java
  • JavaScript
  • Groovy
  • .NET
  • PHP
  • Perl
  • Python
  • Ruby
  • 以及社区贡献的更多接口

使用我们喜欢的语言通过RESTful API接口,访问9200端口,就可以与elasticsearch玩耍了。
上手elasticsearch非常容易,它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。
随着越学越深入,还可以利用Elasticsearch更多高级的功能,整个引擎可以很灵活地进行配置。可以根据自身需求来定制属于自己的Elasticsearch。

elasticsearch的前世今生

多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。
Shay的妻子依旧等待着她的食谱搜索……

elasticsearch:面向文档

我们知道,关系型数据库以记录和行的形式存储数据,但是在elasticsearch中,是以文档的形式存储数据。
但区别在于,文档要比数据表的行更加灵活。因为文档可以是多层次的,它(文档)鼓励你将属于一个逻辑实体的数据保存在同一个文档中,而不是散落在各个表的不同行中。这样查询效率很高,因为我们无需连接其他的表,我们学习关系型数据库时,一定知道连表查询(尤其是连接多张表)是多么的费时吧!
我们将在后续文章做更多的讲解。

没有成熟的案例?

之前有人说,elasticsearch的缺点之一是没有成熟的案例加持,那我们就来看看elasticsearch都有哪些成熟的案例:

  • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。
  • 英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。
  • StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。
  • GitHub使用Elasticsearch来检索超过1300亿行代码,可以参考A Whole New Code Search
  • 每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。
所以,elasticsearch可以灵活的应用于我们的项目中。

如何学好elasticsearch

除了万能的百度和Google 之外,我们还有一些其他的学习途径:

  • elasticsearch官方文档:这个比较好点,可以多多参考
  • elasticsearch博客:这个吧,看看就行
  • elasticsearch社区:社区还是很好的
  • elasticsearch视频:包括入门视频什么的
  • elasticsearch实战:该书籍的质量还是不错的。
  • elasticsearch权威指南:同样的,这个也不错。

最后,你一定很好奇,elasticsearch索引能处理多大的数据

一个很好地问题,不幸的是,单一索引的极限取决于存储索引的硬件、索引的设计、如何处理数据以及你为索引备份了多少副本。

通常来说,一个Lucene索引(也就是一个elasticsearch分片)不能处理多于21亿篇文档,或者多于2740亿的唯一词条。但达到这个极限之前,我们可能就没有足够的磁盘空间了!
当然,一个分片如何很大的话,读写性能将会变得非常差。

扯了半天的淡,让我们开始一个灵活的学习之旅吧

原文地址:https://www.cnblogs.com/rixian/p/10746403.html

时间: 2025-01-17 13:25:58

ES-什么是elasticsearch的相关文章

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接 3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接 4. ES提供了多种

springboot整合es客户端操作elasticsearch(二)

在上章节中整合elasticsearch客户端出现版本问题进行了处理,这章来进行springboot整合得操作 环境:elaticsearch6.2.1,springboot 2.1.8 客户端版本采用6.6.1 一 pom.xml依赖引入 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

ES之五:ElasticSearch聚合

1.单值聚合 Sum求和,dsl参考如下: { "size": 0, "aggs": { "return_balance": { "sum": { "field": "balance" } } } } 返回balance之和,其中size=0 表示不需要返回参与查询的文档. Min求最小值 { "size": 0, "aggs": { "

ES之六:ElasticSearch中Filter和Query的异同

如下例子,查找性别是女,所在的州是PA,过滤条件是年龄是39岁,balance大于等于10000的文档: { "query": { "bool": { "must": [ { "match": { "gender": "F" } }, { "match": { "state": "PA" } } ], "filter&

[学习ES系列]-4.ElasticSearch基础交互-基础查询与高级查询

基础查询 POST http://127.0.0.1:9200/book/_search 1.简单查询 { "query":{ "match_all":{} } } 2.条件查询 { "query":{ "match":{ "title":"入门到精通" } }, "from":1, "size":5, "sort":{ &qu

springboot整合es客户端操作elasticsearch(三)

继续上个随笔: 那么我们只需要修改controller中文件就可以完成相关操作 本次主要是对文档得操作: 更新文档: package com.cxy.elasticsearch.controller; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetR

[学习ES系列]-3.ElasticSearch基础交互

RESTful API with JSON over HTTP 创建索引 PUT http://127.0.0.1:9200/people { "setting":{ "number_of_shards":5, "number_of_replicas":1 }, "mappings":{ "man":{ "properties":{ "name":{ "ty

[数据库]漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)

ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊艳的是他强大的搜索相关能力和灾备策略,ES开放了一些接口供开发者研发自己的插件,ES结合中文分词的插件会给ES的搜索和分析起到很大的推动作用.ElasticSearch是使用开源全文检索库ApacheLucene进行索引和搜索的,说架构必须和Lucene的一些东西打交道. 关于Lucene: Ap

漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)

ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊艳的是他强大的搜索相关能力和灾备策略,ES开放了一些接口供开发者研发自己的插件,ES结合中文分词的插件会给ES的搜索和分析起到很大的推动作用.ElasticSearch是使用开源全文检索库ApacheLucene进行索引和搜索的,说架构必须和Lucene的一些东西打交道. 关于Lucene: Ap

ES 12 - 配置使用Elasticsearch的动态映射(dynamic mapping)

目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2.2 策略示例 3 定制dynamic mapping策略 3.1 date_detection - 日期识别策略 3.2 在type中自定义动态映射模板 3.3 [过期]在index中自定义默认映射模板 1 动态映射(dynamic mapping) 1.1 什么是动态映射 动态映射时Elastic