Elasticsearch是什么?

Elasticsearch简称ES,是一个基于Lucene构建的开源、分布式、Restful接口的全文搜索引擎,还是一个分布式文档数据库。天生就是分布式、高可用、可扩展的,可以在很短的时间内存储、搜索和分析大量的数据。

什么是全文搜索?

全文搜索也叫全文检索,是指扫描文章中的每一个词,对每一个词进建立一个索引,指明该词在文章中出现的次数和位置,当前端用户输入的关键词发起查询请求后,搜索引擎就会根据事先建立的索引进行查找,并将查询的结果响应给用户。

这里有两个关键字:分词和索引,Elasticsearch内部会完成这两件事情,对保存的文本内容按规则进行分词,并对这些分词后的词条建立索引,供用户查询。

什么是倒排索引?

全文搜索过程根据关键词创建的索引叫倒排索引,顾名思义,建立正向关系“文本内容-关键词”叫正排索引,后续会介绍,倒排索引就是把原有关系倒过来,建立成“关键词-文本内容”的关系,这样的关系非常利于搜索。

举个例子:

  • 文本1:I have a friend who loves smile
  • 文本2:I have a dream today

先进行英文分词,再建立倒排索引,得到一份简易的“关键词-文本”的映射关系如下:

关键词 文本编号
I 1,2
have 1,2
a 1,2
friend 1
who 1
loves 1
smile 1
dream 2
today 2

有了这个映射表,搜索"have"关键词时,立即就能返回id为1,2的两条记录,搜索today时,返回id为2的记录,这样的搜索性能非常高。当然Elasticsearch维护的倒排索引包含更多的信息,此处只是作简易的原理介绍。

Elasticsearch什么场景适用?

常见场景
  1. 搜索类场景

    常见的搜索场景比如说电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。

  2. 日志分析类场景

    经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统都是使用该方案。

  3. 数据预警平台及数据分析场景

    例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消息,通知用户购买。

    数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top 10关注度、评论数、访问量的内容等等。

  4. 商业BI系统

    比大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

常见案例
  • 维基百科、百度百科:有全文检索、高亮、搜索推荐功能
  • stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。
  • github:从上千亿行代码中搜索你想要的关键代码。
  • 日志分析系统:各企业内部搭建的ELK平台。
  • 等等

Elasticsearch的架构图

架构各组件简单释义:

  • gateway 底层存储系统,一般为文件系统,支持多种类型。
  • distributed lucence directory 基于lucence的分布式框架,封装了建立倒排索引、数据存储、translog、segment等实现。
  • 模块层 ES的主要模块,包含索引模块、搜索模块、映射模块。
  • Discovery 集群node发现模块,用于集群node之间的通信,选举coordinate node操作,支持多种发现机制,如zen,ec2等。
  • script 脚本解析模块,用来支持在查询语句中编写的脚本,如painless,groovy,python等。
  • plugins 第三方插件,各种高级功能可由插件提供,支持定制。
  • transport/jmx 通信模块,数据传输,底层使用netty框架
  • restful/node 对外提供的访问Elasticsearch集群的接口
  • x-pack elasticsearch的一个扩展包,集成安全、警告、监视、图形和报告功能,无缝接入,可插拔设计。

Elasticsearch安装使用

官网地址

https://www.elastic.co/cn/

上面有各版本的下载地址,官方文档和使用示例,请自行下载安装包。

源码地址

https://github.com/elastic/elasticsearch

上面有各版本的源码地址,可以切换到指定版本进行研究,目前选用版本为6.3.1

安装步骤
  1. 环境要求

    JDK 1.8及以上
  2. 官网下载安装包,在指定目录下直接解压
  3. 执行bin/elasticsearch(Linux,注意不能使用root账户)

    bin\elasticsearch.bat(Windows)
  4. curl http://localhost:9200/或浏览器打开http://localhost:9200/地址,看到下面的响应表示启动成功:
{
"name" : "node-1",
"cluster_name" : "hy-application",
"cluster_uuid" : "lJ4DRWOvQauAy-VEYiZc2g",
"version" : {
"number" : "6.3.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "eb782d0",
"build_date" : "2018-06-29T21:59:26.107521Z",
"build_snapshot" : false,
"lucene_version" : "7.3.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
  1. kibana下载解压启动

    执行bin/kibana(Linux,注意不能使用root账户)或bin\kibana.bat(Windows),如果kibana和elasticsearch部署在同一台机器上,使用默认的配置文件即可。
  2. 验证kibana,浏览器上输入http://192.168.17.137:5601/,出现如下界面表示启动成功:

    图二

小结

本篇简单介绍了Elasticsearch的基本概念,适用场景和主要的功能框架,以及最简单的用于学习验证的安装启动步骤,作为Elasticsearch系统的开篇学习,Elasticsearch有个特点就是开箱即用,如果是用作学习,或是中小型应用,数据量比较少、操作不是很复杂的话,直接启动就可以用了。后续的Elasticsearch学习,如无特别说明,均以6.3.1版本为例。

专注Java高并发、分布式架构,更多技术干货分享与心得,请关注公众号:Java架构社区

Elasticsearch系列---初识Elasticsearch的更多相关文章

  1. 【原创】《从0开始学Elasticsearch》—初识Elasticsearch

    目录 1. Elasticsearch 是什么2. Elasticsearch 中基本概念3. Elasticsearch 安装4. 访问 Elasticsearch 1. Elasticsearch ...

  2. Elasticsearch系列---初识搜索

    概要 本篇主要介绍搜索的报文结构含义.搜索超时时间的处理过程,提及了一下多索引搜索和轻量搜索,最后将精确搜索与全文搜索做了简单的对比. 空搜索 搜索API最简单的形式是不指定索引和类型的空搜索,它将返 ...

  3. Elasticsearch系列---初识mapping

    概要 本篇简单介绍一下field数据类型mapping的相关知识. mapping是什么? 前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于J ...

  4. Elasticsearch 系列3 --- Elasticsearch配置

    一. 位置 ES的配置文件位于安装目录\config下面,主要有 (1) elasticsearch.yml ES系统的配置: (2) jvm.options Java虚拟机配置: (3) log4j ...

  5. elasticsearch系列一elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  6. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  7. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  8. ElasticSearch实战系列四: ElasticSearch理论知识介绍

    前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是 ...

  9. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

随机推荐

  1. webpack 4.x 从零开始初始化一个vue项目

    创建目录 项目名称: vue-init app css reset.sass js home index.vue router index.js main.js App.vue views index ...

  2. shell 点命令和source指令

    1 shell脚本执行方法 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts:一种是在当前shell下执行,不再启用其他shell.新产生 ...

  3. golang数据结构之循环链表

    循环链表还是挺有难度的: 向链表中插入第一条数据的时候如何进行初始化. 删除循环链表中的数据时要考虑多种情况. 详情在代码中一一说明. 目录结构如下: circleLink.go package li ...

  4. luogu P1082 同余方程 |扩展欧几里得

    题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. ...

  5. ZOJ 2112 Dynamic Rankings(树状数组+主席树)

    The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...

  6. HashMap的常见问题

    关于HashMap的一些常见的问题,自己总结一下: 首选HashMap在jdk1.7和jdk1.8里面的实现是不同的,在jdk1.7中HashMap的底层实现是通过数组+链表的形式实现的,在jdk1. ...

  7. springboot中的pom文件是如何管理依赖的

    我们来看一下新建完成后的springboot中的pom文件 <?xml version="1.0" encoding="UTF-8"?> <p ...

  8. [Input-number]数字输入框组件

    需求 加.减按钮 初始值 最大.最小值 数值改变时,触发一个自定义事件来通知父组件 目录文件 index.html 入口页 input-number.js 数字输入框组件 index.js 根实例 实 ...

  9. 写入Apache Hudi数据集

    这一节我们将介绍使用DeltaStreamer工具从外部源甚至其他Hudi数据集摄取新更改的方法, 以及通过使用Hudi数据源的upserts加快大型Spark作业的方法. 对于此类数据集,我们可以使 ...

  10. redis(6)--redis集群之分片机制(redis-cluster)

    Redis-Cluster 即使是使用哨兵,此时的Redis集群的每个数据库依然存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应.而因为Redis是基于内存 ...