为什么要用Elasticsearch

概念

Elasticsearch 简称ES,是一个分布式全文检索引擎。
比如github的代码检索就是用了ES,百度也有用ES。
由于Lucene的api相对比较复杂,所以ES其实是对Lucene的封装简化,并且提供了一套比较简单的api文档。
es官网

使用场景

主要是海量数据检索,关键词:海量。因为只有数据量大了才能体现ES的优势。

以下是我能想到的或者是之前有遇到过的场景:

1、常用的经典组合ELK(elasticsearch+Logstash+kibana )做日志分析处理

elasticsearch:提供日志的分布式存储和全文检索
Logstash:传输日志
kibana:前端展示

2、项目中海量数据的存储和搜索

比如让你做一个类似于微博的后台服务,光检索这块,就可以考虑ES

3、项目中的关系型数据的前置缓存

如果你的项目,正在使用关系型数据库,有以下特点,就可以考虑用ES作一层缓存

  • 数据量大,但数据结构又不太复杂
  • 查询压力大,查询条件多样化,多变

举个例子,比如电商网站的,针对审核人员,客服人员专用的查询订单的接口
这类接口要求查询快,而且可查历史所有上亿级别的订单,而且不一定是一定根据订单号查,可能查询条件很多,有类似模糊匹配。那只用关系型数据库,怕是得好好下功夫了,但如果使用ES,那就非常简单了。

ES 优点

支持横向扩展
支持很多插件
其实说全文检索的核心优点,应该是要说Lucene的,所以如果要深挖,建议先学Lucene,比如lucene的数据和索引分离存储等,硬说成是ES的优点那也行。
总而言之,ES如果是一辆跑车,那Lucene就是引擎,就是核心。ES只不过是让这个引擎物有所用,真正被利用起来而已。

同类框架solr

github以前是用solr作全文检索的,后来换成了ES
基本上标志着ES把solr给超越了
后来很少听人说项目中还用Solr的,基本都是ES了

安装

安装单实例es

首先es版本有1.x,2.x,5.x,6.x,7.x
使用最新的,尽量避免使用5.x之前的

https://www.elastic.co/cn/downloads/elasticsearch
进入es官网下载,安装(需要有jdk环境,eg:1.8)
页面访问 localhost:9100

安装可视化页面-Head插件

下载:https://github.com/mobz/elasticsearch-head
需要有node环境,eg:8.2

npm install 安装
npm run start 启动

还有其他可视化插件,基本上都是下载安装,配置url就能用,请自行搜索吧

修改es配置,解决和head的跨域问题

es的config/elasticsearch.yml文件下
文件末尾加以下内容

http.cors.enable: true
http.cors.allow-origin: "*"

分别启动es和head
页面访问 localhost:9100

安装分布式集群es

1个master节点+2个slave节点

1、master节点配置
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是master节点

# 集群名字
cluster.na zhangsan
# 节点名字为master
node.name: master
# 指定当前节点为master
node.master: true
# 绑定本地ip
network.host: 127.0.0.1

启动master
2、slave节点配置
复制安装包信息,作为slave
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是slave节点

# 集群名字,这个必须和master节点的集群名字一致
cluster.na zhangsan
# 节点名字为slave01,多个节点就slave02,slave03...
node.name: slave01# 绑定本地ip
network.host: 127.0.0.1
# 配置slave的端口,es默认端口是9200,我们让master是默认的9200
http.port: 9201
# 配置这个,为了能找到master
dicxovery.zen.ping.unicast.host: ["127.0.0.1"]

启动slave01,slave02

es的一些基础概念

索引

含有相同属性的文档集合
相当于mysql的数据库

类型

索引可以定义一个或多个类型,文档必须属于一个类型
相当于mysql的表,数据库里可以有一个或多个表,一行记录必须属于一个表

文档

文档是可以被索引的基本数据单位
相当于mysql的一行记录

分片

每个索引都有多个分片,每个分片都是一个lucene索引
es在创建索引时默认创建5个分片
分片数量必须在创建索引时指定,后面不能修改
相当于mysql的数据分片

备份

copy一份分片就完成了分片的备份
es在创建索引时默认创建1个备份
备份可以后期修改
相当于mysql的数据备份

集成spring-boot

es是提供了一套restful api接口
spring-boot集成,也是通过代码,去构建各个接口的参数再执行的。

还有安装分词器之类的,这其实都是lucene的知识点了。

最后要说

照着网上的教程,可以很快的搭起一套ES的服务,与项目的集成使用也不是很难。

难点在于要搞清楚为什么ES可以做全文检索,其实还是绕不开Lucene,学习Lucene索引才是重中之重。

对于应用来说,重点在于要知道ES能做什么,擅长做什么,什么时候用。

我总结了:就是海量数据的全文检索。

建议有本书可以看下:从Lucene到Elasticsearch全文检索实战
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

赶紧看一下mysql8.0版本的新特性,你的数据库是不是该升级了

这里写目录标题前言mysql8.0的新特性1、账户安全2、优化器索引2.1、隐藏索引(invisible)2.2、降序索引2.3、函数索引3、SQL语句增强4、新增数据分析函数5、InnoDB增强5.1、优化了一些元数据文件5.2、将系统表mysql和数据字典表,全部改为InnoD…

ThreadLocal不仅要应付面试,更要真的理解,真的会用

前言 记得我几年前第一次面试的时候,就是被问了这个,记得面试官直接就让我说说ThreadLocal的实现原理以及平时有没有见过哪些地方用到了。 我当时初入职场,还是一个大菜鸟,所以直接就被干蒙了,至今还记忆犹新。 闲来…

Base64编码的原理与常用实现

这篇主要是为了后面好介绍加密算法,做的铺垫。 这个是基础,什么是一个程序员的涵养,这些基础就是涵养。 平时可能用不到,但必须得会。 如果连这个原理都说不上来,就别玩王者荣耀绝地求生英雄联盟和平精英了&#xff0c…

MD5算法原理与常用实现

目录定义MD5特点常见应用场景1、校验文件的完整性2、存储用户密码原理1、填补信息2、拿到初始值3、真正的计算MD5为什么不可逆java实现和使用定义 MD全称Message-Digest,即信息摘要,所以MD家族的算法也叫信息摘要算法 MD家族有MD2、MD3、MD4、MD5&#…

SHA算法原理与常用实现

看本文前,最好先看看之前的这一篇关于MD5算法的介绍。 MD5算法原理与常用实现 本文目录定义MD5和SHA-1的碰撞问题常见应用场景1、类似MD5的应用场景2、比特币3、https签名算法会用到SHA-256算法原理1、填补信息2、拿到初始值3、真正的计算java实现和使用定义 SHA算…

MAC算法原理与常用实现

看本文前,最好先看看之前的对于MD5算法和SHA算法的介绍。 本文目录定义常见应用场景1、linux客户端:SecureCRT2、Google身份验证器3、银联pos机终端原理java实现和使用定义 MAC(Message Authentication Codes),是一种…

面试 HTTP ,99% 的面试官都爱问这些问题

HTTP 和 HTTPS 的区别HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范HTTP 主要内容分为三部分,超文本(Hypertext)、传输…

@JsonFormat失效解决

先说结论 JsonFormat失效,换成JSONField就好了 问题经过和原理 JsonFormat作为Date类型的属性值,返回前端格式化处理,很方便。 比如: JsonFormat(pattern "yyyy/MM/dd HH:mm:ss")private Date updateTime;返回给前端…

如何在摆摊经济中脱颖而出

最近,摆摊经济开始火了起来,于是各路诸侯纷纷举起大旗开始摆摊。我周围也不乏有亲朋好友蠢蠢欲动,有的甚至已经初有规模。但这波摆摊风是否真的可行,对谁可行,有哪些风口,有哪些坑,我们慢慢分析…

java 实现 生成短链接服务

java实现短链接转换服务 类似上图这种短信,对应的就是一个短链接。 看到原理也不难,于是先写个最简易版的玩玩,以后有需求了再补充吧 下面是一个简易版的短链接生成代码 搭个spring-boot服务,复制这两个controller,就…

[转载] --- Fastjson1.2.68版及以下全版本远程代码执行漏洞通告

再这样&#xff0c;真的要放弃fastjson了 【安全通告】Fastjson <1.2.68全版本远程代码执行漏洞通告 尊敬的腾讯云用户&#xff0c;您好&#xff01;近日&#xff0c;腾讯云安全运营中心监测到&#xff0c;Fastjson <1.2.68版本存在远程代码执行漏洞&#xff0c;漏洞被利…

数据库选型经验汇总

数据库选型 下面这些都是免费开源的。 暂且不考虑数据量&#xff0c;大致的选型方案。 一般分析型数据库&#xff0c;都是可以支持GB到TB级别。 上面的分类都不是一定的&#xff0c;只是大体上的推荐。具体还得结合实际场景调整。 数据处理大致可以分成两大类&#xff1a; 联…

RabbitMQ和Kafka选型用哪个

作为一个有丰富经验的微服务系统架构师&#xff0c;经常有人问我&#xff0c;“应该选择RabbitMQ还是Kafka&#xff1f;” 基于某些原因&#xff0c; 许多开发者会把这两种技术当做等价的来看待。的确&#xff0c;在一些案例场景下选择RabbitMQ还是Kafka没什么差别&#xff0c…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

错误记录:Current request is not a multipart request

springboot 报错&#xff1a;Current request is not a multipart request 这个一般是controller是带有上传文件的服务&#xff0c;类似RequestParam MultipartFile[] file 解决&#xff1a; 首先检查请求头中的Content-Type是否设置对&#xff0c;如果把Content-Type设置成a…

java 使用gzip压缩和解压 传输文件必备

java gzip 压缩解压工具类&#xff0c;开箱即用 gzip原理看我另外一篇介绍 压缩效果直接看图&#xff1a; package com.yeahmobi.datacheck.util;import java.io.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream;public class CompressUtil…

spring boot maven项目返回值乱码的解决方法

spring boot maven项目返回值乱码的解决方法 1、先看乱码效果&#xff1a; spring boot maven项目&#xff0c;返回值乱码&#xff0c;如下图&#xff1a; 控制台打印log乱码&#xff0c;如下图&#xff1a; 有swagger的话&#xff0c;swagger文档乱码&#xff0c;如下图&…

【错误记录】Invalid character found in method name. HTTP method names must be tokens

错误日志 [2020-08-14 10:47:11.262] [http-nio-8093-exec-7] [INFO] [o.a.c.h.Http11Processor] [Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.] java.lang.IllegalArgumentException: Invali…

redis 常见基础面试题

1、在项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果&#xff1f; 面试官心理分析 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个…

【转载】广告系统架构解密

广告、增值服务、佣金&#xff0c;是互联网企业最常见的三种盈利手段。在这3大经典中&#xff0c;又以广告所占的市场份额最大&#xff0c;几乎是绝大部分互联网平台最主要的营收途径&#xff0c;业务的重要性不言而喻。 从技术角度来说&#xff0c;广告业务涉及到 AI算法、大数…