介绍

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,下面就介绍ElasticSearch为什么是分布式的,可扩展,高性能,高可用。

什么是搜索

在我们想知道一些信息时,就会使用一些搜索引擎来获取我们想要的数据,比如搜索我们喜欢的一款游戏,或者喜欢的一本书等等,这就是提到搜索的的第一印象,说直白点就是在任何场景下找寻你想要知道的信息,这就是搜索。

  • 现在的搜索也称为垂直搜索
    垂直搜索引针对某一个行业的专业搜索引擎,比如说电商网站,新闻网站,各种app内部等等,他们都是搜索引擎的细分和延伸,在抽取出需要的数据进行处理后再以某种形式返回给用户。

如果用数据库来做搜索会怎么样

例如我们这里有一张商品表,现在我们要搜索"衣服"这个关键字,,执行了 select * from products where product_name like %衣服%,(假设这里没有其他任何提升效率的设置)来进行搜索,或者进行其他字段的匹配,可以分析一下这个方式的缺点。

  • 1,比如说,每条记录的指定字段的数据会很长,比如说“商品介绍”这个字段,可能会有几千或者几万个字符,那么搜索的时候就会去这些字符里面进行匹配是否包含要搜索的关键词。

  • 2,这种方式只能搜索到完全包含“衣服”这个两个字符的记录,但是可能会有一些特殊的情况,某几条记录里面的“衣服”关键词并不是连续的,可能衣服中间会插入某些字符,这个时候就搜索不出来这些记录了,但是这个商品又是我们希望搜索出来的,这个时候这种方式的弊端就十分明显了。

总的来说用数据库来实现搜索是不太靠谱的,性能会很差。

什么是全文检索

首先需要了解什么是倒排索引?我们这里先上一幅图,里面有4条记录。

现在将这4条记录的内容进行拆分成一些词条,这个过程叫做分词

现在我们得到了这4条记录拆分出来词语,然后将这写词语放到一个列表中,并记录他们的ID,这个分析出来的就是 倒排索引

现在我们输入 生化电影 这个关键词,这个时候搜素引擎将我们输入的内容分词为 生化电影 这两个关键词,然后使用这个两个关键词去倒排索引里面匹配,发现包含 生化 这个关键词的记录有ID为 1,2,3,4这四条记录,包含 电影 这个关键词的有ID为1这条记录,由于ID为1这条记录已经被录入了,所以就被排除在外了, 这时候我们就得到了想要ID为1234这4条记录,同理,如果我们只输入 电影 这个关键词,那么符合条件的只有ID为1这条记录了。

全文检索就是从拆分词语,存入倒排索引,然后分析用户输入的内容,在倒排索引里面进行匹配,这个过程就是全文检索。

什么是ElasticSearch

首先需要知道什么是lucene,lucene它就是一个Java的jar包,里面实现了倒排索引的算法和其他的全文检索相关的东西,ElasticSearch就是对lucene进行了封装,为什么有lucene了还要ElasticSeaearch来干什么呢?首先,当数据量很大的时候,比如有1PB的数据,这个时候数据放在同一台机器上基本就不行了,那么把数据分开来放在多台机器上呢?那就变成分布式了,这个时候数据前端获取数据的时候到底去那一台机器上面去获取数据呢?这个时候就很麻烦了,如果某一台机器宕机了,那么这个机器上的数据就获取不到了,这也就无法保证高可用性了,还有数据存储的时候怎么到底存入那台机器等等,这些都需要人为的处理和维护。这个时候ElasticSearch就应运而生了,它就将lucene这些弊端给完全解决了。

举例一些优点

  1. 高性能,自动维护数据分布到多个节点进行索引的建立,还有搜索请求分布到多个节点的执行。
  2. 高可用,自动维护数据的冗余副本,保证说,一些机器宕机了,不会造成数据的丢失。
  3. 封装了更多的高级功能,以给我们提供更多的高级支持,让我们快速的开发应用,开发更加复杂的应用,复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(比如周围一公里内有几家咖啡厅)等等。
  4. 动态扩容,当我们数据量急剧提升的时候,我们只需要增加机器就行了,比如两台机器存放1.2T数据,那么没台机器存放就是600G,但是如果600G对于服务器的压力太大了,这个时候就需要增加第三台机器,让他们每人负责400G的数据,这个过程不需要人为的去分配,只需要将汲取加入集群中就自动完成。

用最简单的话告诉你什么是ElasticSearch的更多相关文章

  1. Kibana安装及简单使用

    Kibana安装 参照官方文档即可,这里只做相关操作记录: wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-linux- ...

  2. 简单使用packetbeat

    简单使用packetbeat 标签:packetbeat elasticsearch 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面两篇文章中记录了使用logstash来收集mysql的慢 ...

  3. Elasticsearch简单使用和环境搭建

    Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...

  4. ElasticSearch - ElasticSearch和kinaba的简单使用

    ElasticSearch和kinaba的简单使用 ElasticSeatch 文档推荐 ElasticSearch 下载 (端口 9200) 安装好es,可以访问 http://localhost: ...

  5. Server.Transfer 和 Response.Redirect 用法区别

    在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可以达到重定向页面的作用,而且在某些时刻 ...

  6. 能力素质模型咨询工具(Part 2)

    核心能力素质模型数据库 1. 工作态度 通用 (1)热爱本职工作,对工作充满信心 (2)在没有明确的规定或领导指示的情况下,能够积极主动地承担职责范围内的各项工作,并能够积极地配合其他同事/部门工作 ...

  7. [小菜随笔]关于monkey报错日志分析

    今天小菜在一个测试群内看到群友发出一个monkey的报错信息,其实是一个很简单的报错 个人觉得monkey虽然操作起来比较简易,但其实查看日志分析日志也是很重要的环节,如果对错误分析不够详细,就容易误 ...

  8. composer.json:项目安装!!!!!!!!!!

    基本用法 基本用法 安装 composer.json:项目安装 关于 require Key 包名称 包版本 下一个重要版本(波浪号运算符) 稳定性 安装依赖包 composer.lock - 锁文件 ...

  9. IOS UIView 01-View开始深入 绘制像素到屏幕上

    注:本人是翻译过来,并且加上本人的一点见解. 前言 一个像素是如何绘制到屏幕上去的?有很多种方式将一些东西映射到显示屏上,他们需要调用不同的框架.许多功能和方法的结合体.这里我们大概的看一下屏幕之后发 ...

随机推荐

  1. 【Coucurrency-CountDownLatch】-20161203-0002

    简介 java异步任务相关的工具.主要用在某些线程需要等到其他线程完成某些操作后才能执行的场景. 等待线程需要显示的调用wait方法,表示线程当前挂起,需要等到countdownLatch到0才执行. ...

  2. Linux环境下mysql主从同步环境搭建

    #my.cnf添加内容vim /etc/my.cnf添加以内容: ## replicationserver_id=195binlog-ignore-db=mysqlbinlog_format=mixe ...

  3. Python heapq模块

    注意,默认的heap是一个小顶堆! heapq模块提供了如下几个函数: heapq.heappush(heap, item) 把item添加到heap中(heap是一个列表) heapq.heappo ...

  4. Android Studio解决Error:moudle not specified

    在使用Android Studio 进行Builder APKs的时候,如果发现无法degub, 进行配置的时候 没有module可以进行指定,如果所示(借个图) 问题的原因一般是Grade File ...

  5. height属性

    高度属性: height:长度值|百分比|auto 最大高度:max-height 最小高度:min-height 说明:设置块级元素和替换元素的内容高度.

  6. android studio连接真机大概问题

    首先,确定手机Android的版本(最好用统一版本) 版本一样的话错误会少一点... 手机打开开发者选项(每个手机不同,百度可查) 开发者选项中打开USB调试 点击OK,可以进入Android mon ...

  7. 几何概型 uva11722

    #include<bits/stdc++.h> using namespace std; int t1,t2,s1,s2,w; int get(int b) { ; int d=s2-s1 ...

  8. 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集

    TensorFlow Serving https://tensorflow.github.io/serving/ . 生产环境灵活.高性能机器学习模型服务系统.适合基于实际数据大规模运行,产生多个模型 ...

  9. BigData_Jia

    #include <stdio.h> #include <string.h> #define MaxSize 10000 int n1, n2, i, k, times; ch ...

  10. PythonStudy——nonlocal关键字

    # 作用:将局部的变量提升为嵌套局部变量# 1.必须有同名嵌套局部变量,就是统一嵌套局部与局部的同名变量# -- 如果局部想改变嵌套局部变量的值(发生地址的变化),可以用nonlocal声明该变量 d ...