Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统

  • 什么是搜索?
  • 如果用数据库做搜索会怎么样?
  • 什么是全文检索和Lucene?
  • 什么是Elasticsearch?
  • Elasticsearch的功能

什么是搜索

提供一种数据提取的服务

垂直搜索(站内搜索)

互联网的搜索:电商网站,招聘网站,新闻网站,各种app IP系统的搜索:OA软件,会议管理,日程管理,项目管理,员工管理,搜索"张三",

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

当如果你用电商系统搜索的时候 select * from products where product_name like "%牙膏%"

1,每次都要从数据库的搜索字段去判断 2,不能分词

你能匹配出 高露洁牙膏、中华牙膏、佳洁士牙膏,你能匹配出来,当如果有黑人牙盐膏之类的。又或者如果你搜索生化危机但是打错打成了生化机结果出来肯定不是你想要的

什么是全文检索和Lucene

全文检索: 当如果你搜索一个新闻的时候比如你搜索鹿晗那你有可能想要的结果是鹿晗视频,鹿晗新闻,鹿晗女友,鹿晗绯闻等,这些东西我们都需要提供,我们需要做的是在关键词这里将这些词汇进行分词,然后整体的结果我们在每个分词那里用一个数字来表示,这样当关键词鹿晗出现的时候你这四个词的,1,2,3都会有结果的显示,这样做的好处就是你搜索鹿晗闻的时候他能在关键词有鹿晗的标识一下,当有闻的位置ids在看一下
倒排索引:进行搜索的话,假设100万条数据,拆分出来的词语,假设有1000万的词语,那么在倒排索引中就有1000万行,我们可能就不需要1000万次了,可能几次的要求匹配就搜索到了

lucene:就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。然后我们基于lucene的API进行开发,用lucene我们就可以去将已有的数据建立索引,lucene会在本地磁盘上,给我们组织的索引的数据结构,另外我们也能根据lucene提供的功能和api来针对磁盘上的索引数据进行搜索。

  • elasticsearch:底层封装了lucene 有以下几个特点

    • 自动维护数据分布到多个节点索引的建立,还有搜索请求分布到多个节点的执行
    • 自动维护数据的冗余副本,保证说一些机器宕机了,不会丢失任何的数据
    • 封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用:复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(距离我多远的公交站)
  • Elasticsearch的功能

    • 1)分布式的搜索引擎和数据分析引擎

      • 搜索:百度,网站的站内搜索,IT系统的检索
      • 数据分析:比如某个商品销量前10的商家有哪些。
    • 2)全文检索,结构化检索,数据分析

      • 全文检索:条件的匹配
      • 结构化检索:我想搜索的商品分类为日化用品的商品有哪些
      • 部分匹配、自动完成、搜索纠错、搜索推荐
    • 3)对海量数据进行实时的处理

      • 分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
      • 海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
      • 近实时:检索个数据要花费1个小时(这就不是近实时,离线普处理,batch-processing):在秒级别对数据进行搜索和分析

跟分布式/海量数据相反的:lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的海量数据

  • Elasticsearch的使用场景

    1. 维基百科
    2. stack overflow国内外程序异常讨论论坛,IT问题,程序的报错
    3. github等
  • Elasticsearch的特点

    1. 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
    2. Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat)
    3. 对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂
    4. 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能

elasticsearch的核心概念

(1)Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级
(2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常
(3)Node:节点,集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群
(4)Document&field:文档,es中的最小数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以去存储多个document。一个document里面有多个field,每个field就是一个数据字段。
(5)Index:索引,包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。比如说建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。
(6)Type:类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。
(7)shard:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
(8)replica:任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。

3、elasticsearch核心概念 vs. 数据库核心概念

Elasticsearch 数据库

Document 行
Type 表
Index 库

Elasticsearch介绍,一些概念的笔记的更多相关文章

  1. 1.ElasticSearch介绍及基本概念

    一.ElasticSearch介绍 一个采用RESTful API标准的高扩展性的和高可用性的实时性分析的全文搜索工具 基于Lucene[开源的搜索引擎框架]构建 ElasticSearch是一个面向 ...

  2. Elasticsearch系列---Elasticsearch的基本概念及工作原理

    基本概念 Elasticsearch有几个核心的概念,花几分钟时间了解一下,有助于后面章节的学习. NRT Near Realtime,近实时,有两个层面的含义,一是从写入一条数据到这条数据可以被搜索 ...

  3. Elasticsearch 介绍及应用

    Elasticsearch简单介绍 Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库 ...

  4. Elasticsearch介绍和安装与使用

    转载:https://blog.csdn.net/weixin_42633131/article/details/82902812 1.Elasticsearch介绍和安装 1.1.简介1.1.1.E ...

  5. Docker介绍基本概念(一)

    Docker介绍基本概念 1.什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker是世界领先的软件容器平台. Docker使用 ...

  6. elasticsearch介绍,安装,安装错误解决及相应插件安装

    一.elasticsearch介绍 1.简介(使用的是nosql,更新比mongodb慢): ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎, ...

  7. 【SpringBoot】搜索框架ElasticSearch介绍和整合SpringBoot

    ========================12章 搜索框架ElasticSearch介绍和整合SpringBoot ============================= 加入小D课堂技术交 ...

  8. Elasticsearch介绍及安装部署

    本节内容: Elasticsearch介绍 Elasticsearch集群安装部署 Elasticsearch优化 安装插件:中文分词器ik 一.Elasticsearch介绍 Elasticsear ...

  9. elasticsearch的核心概念

    1.elasticsearch的核心概念 (1)Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒):基于es执行搜索和分析可以达到秒级 (2) ...

随机推荐

  1. ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  2. Java多线程之赛跑游戏

    在JavaSE中,多线程是一个重要的内容. 我们要了解多线程的概念,就要先了解进程的概念:要了解进程的概念,就离不开操作系统的概念. 在一台正常运行的电脑中,计算机硬件(如CPU.内存.硬盘.网卡.显 ...

  3. P、NP、NP完全问题

    如果一个算法的最差时间效率属于O(p(n)),则该算法可以在多项式的时间内对问题进行求解,其中p(n)是输入规模n的一个多项式函数. 可以在多项式时间内求解的问题是易解的.不能在多项式时间内求解的问题 ...

  4. bzoj 4868: [Shoi2017]期末考试

    Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有 ...

  5. Netty-Websocket 根据URL路由,分发机制的实现

    最近在做netty整合websocket,发现网上很多项目都是最简单的demo,单例的一个项目. 然而公司的项目需要接受几个不同功能的ws协议消息,因此最好是用URL来区分,让页面上采用不同的链接方式 ...

  6. Handwritten Parsers & Lexers in Go (Gopher Academy Blog)

    Handwritten Parsers & Lexers in Go (原文地址  https://blog.gopheracademy.com/advent-2014/parsers-lex ...

  7. Struts2-整理笔记(四)Action生命周期、如何获取参数(3种)、集合类型参数封装

    一.Action生命周期 每次请求到来时,都会创建一个新的Action实例 Action是线程安全的,可以使用成员变量接收参数 二.获取参数的方式(3种) 1.属性驱动获得参数 每次请求Action时 ...

  8. 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍

    大家都知道网站建设前期测试于浏览网站都喜欢用iis本地浏览来操作 那么为了方便大家自己来安装和配置Internet信息服务 相信大家,对于Windows 7有了相应的了解,从操作上,使用上,内置功能上 ...

  9. vim置于后台,vim 编辑多文件

    这里介绍一个很实用的方法:1.将vim置于后台,直接按 ctrl + z可以将当前的vim置于后台 2.然后可以去别的目录再打开一个 当你需要打开之前的vim的时候3.打jobs命令看当前有哪些vim ...

  10. vue-router源码学习(一)

    因为v3.01版本中的   /src代码使用TypeScript进行书写,我这里仅仅用作模块学习, 具体学习的还是 /dist/vue-router.js 代码. (一)基本使用方式 JS代码 // ...