跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • MySQL优化

  • MySQL海量数据存储与优化

  • 索引优化注意
  • MySQL平滑扩容实战
  • TiDB

  • 图和Neo4j

  • MongoDB

  • 缓存

  • 文件存储

  • Elasticsearch

    • 1 Elasticsearch基础
      • 1 Elasticsearch是什么
      • 2 Elasticsearch的功能
      • 3 Elasticsearch的特点
      • 4 Elasticsearch企业使用场景
        • 4.1.常见场景
        • 4.2.常见案例
      • 5 主流全文搜索方案对比
        • 5.1 Lucene
        • 5.2 Solr
        • 5.3 Elasticsearch
        • 5.4 三者之间的区别和联系
      • 6 Elasticsearch的版本
        • 6.1 Elasticsearch版本介绍
        • 6.2 Elasticsearch与其他软件兼容
      • 7 Elasticseach Single-Node Mode快速部署
        • 7.1 虚拟机环境准备
        • 7.2 Elasticsearch Single-Node Mode部署
        • 7.2.1 开始安装JDK
        • 7.2.2 配置Elasticsearch
    • 2 Elasticsearch入门使用
    • 3 Elasticsearch高级应用
    • 4 Elasticsearch高可用分布式集群
    • 5 Elasticsearch数据模型构建
    • 6 Elasticsearch搜索实战
    • 7 Elasticsearch深度应用及原理
    • 8 Elasticsearch操作总结
  • 数据库与缓存
  • Elasticsearch
Revin
2023-07-15
目录

1 Elasticsearch基础

# 1 Elasticsearch是什么

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch

Elasticsearch7x_Page2_001

起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索引擎。封装了lucene,做出了开源项目compass。找到工作后,做分布式高性能项目,再封装compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic首席执行官。

# 2 Elasticsearch的功能

  • 分布式的搜索引擎

分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索

搜索:百度、谷歌,站内搜索

  • 全文检索

提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

数据分析引擎(分组聚合)

电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访

问量排名top3的新闻板块是哪些

  • 对海量数据进行近实时的处理

海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自

然而然就可以实现海量数据的处理

近实时:Elasticsearch可以实现秒级别的数据搜索和分析

# 3 Elasticsearch的特点

Elasticsearch的特点是它提供了一个极速的搜索体验。这源于它的高速(speed)。相比较其它的一些大数据引擎,Elasticsearch可以实现秒级的搜索,速度非常有优势。Elasticsearch的cluster是一种分布式的部署,极易扩展(scale )这样很容易使它处理PB级的数据库容量。最重要

的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 。

Elasticsearch7x_Page3_001

# 4 Elasticsearch企业使用场景

# 4.1.常见场景

1. 搜索类场景

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

2. 日志分析类场景

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

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

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

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

4. 商业BI(Business Intelligence)系统

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

Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

# 4.2.常见案例

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

# 5 主流全文搜索方案对比

Lucene、Solr、Elasticsearch是目前主流的全文搜索方案,基于倒排索引机制完成快速全文搜索。

Elasticsearch7x_Page4_001

# 5.1 Lucene

Lucene是Apache基金会维护的一套完全使用Java编写的信息搜索工具包(Jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要我们自己进一步开发搜索引擎系统,例如数据获取、解析、分词等方面的东西。

注意:Lucene只是一个框架,我们需要在Java程序中集成它再使用。而且需要很多的学习才能明白它是如何运行的,熟练运用Lucene非常复杂。

# 5.2 Solr

Solr是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,封装了很多Lucene细节,Solr可以直接利用HTTP GET/POST请求去查询,维护修改索引。

# 5.3 Elasticsearch

Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

# 5.4 三者之间的区别和联系

Solr和Elasticsearch都是基于Lucene实现的。但Solr和Elasticsearch之间也是有区别的

1)Solr利用Zookpper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能

2)Solr比Elasticsearch实现更加全面,Solr官方提供的功能更多,而Elasticsearch本身更注重于核心功能, 高级功能多由第三方插件提供

3)Solr在传统的搜索应用中表现好于Elasticsearch,而Elasticsearch在实时搜索应用方面比Solr表现好

https://db-engines.com/en/ranking

# 6 Elasticsearch的版本

# 6.1 Elasticsearch版本介绍

Elasticsearch 主流版本为5.x , 6.x及7.x版本

7.x 更新的内容如下

  1. 集群连接变化:TransportClient被废弃
以至于,es7的java代码,只能使用restclient。对于java编程,建议采用 High-level-rest-client 的方式操作ES集群。High-level REST client 已删除接受Header参数的API方法,Cluster Health API默认为集群级别。
1
  1. ES数据存储结构变化:简化了Type 默认使用_doc
es6时,官方就提到了es7会逐渐删除索引type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。
api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值
1
2
  1. ES程序包默认打包jdk:以至于7.x版本的程序包大小突然增大了200MB+, 对比6.x发现,包大了200MB+, 正是JDK的大小

  2. 默认配置变化:默认节点名称为主机名,默认分片数改为1,不再是5。

  3. Lucene升级为lucene 8 查询相关性速度优化:Weak-AND算法

es可以看过是分布式lucene,lucene的性能直接决定es的性能。lucene8在top k及其他查询上有很大的性能提升。

weak-and算法 核心原理:取TOP N结果集,估算命中记录数。
TOP N的时候会跳过得分低于10000的文档来达到更快的性能。
1
2
  1. 间隔查询(Intervals queries): intervals query 允许用户精确控制查询词在文档中出现的先后关系,实现了对terms顺序、terms之间的距离以及它们之间的包含关系的灵活控制。

  2. 引入新的集群协调子系统 移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形成仲裁的节点。

  3. 7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断。

设置indices.breaker.fielddata.limit的默认值已从JVM堆大小的60%降低到40%。

  1. 分片搜索空闲时跳过refresh

以前版本的数据插入,每一秒都会有refresh动作,这使得es能成为一个近实时的搜索引擎。但是

当没有查询需求的时候,该动作会使得es的资源得到较大的浪费。

# 6.2 Elasticsearch与其他软件兼容

Elasticsearch与操作系统 (opens new window)

Elasticsearch7x_Page6_001

Elasticsearch and JVM (opens new window)

Elasticsearch7x_Page7_001

# 7 Elasticseach Single-Node Mode快速部署

Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Mode)和集群模式(Cluster Mode)部署,一般来说,小公司的业务场景往往使用Single-Node Mode部署即可。课程中我们先以Single-Node Mode部署实例学习,随后再专门讲授集群模式相关内容。

# 7.1 虚拟机环境准备

  • 准备一台虚拟机

    • 操作系统:CentOS 7.x 64 bit
  • 客户端连接工具:XShell

  • 关闭虚拟机的防火墙

systemctl stop firewalld.service     #停止firewall
systemctl disable firewalld.service  #禁止firewall开机启动
firewall-cmd --state    # 查看防火墙
1
2
3

# 7.2 Elasticsearch Single-Node Mode部署

我们在虚拟机上部署Single-Node Mode Elasticsearch

下载Elasticsearch

地址: https://www.elastic.co/cn/downloads/elasticsearch 最新版本

下载: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7.3..0 版本

选择Linux版本下载:

Elasticsearch7x_Page8_001

# 7.2.1 开始安装JDK

1.解压三个tar.gz文件

tar -zxvf jdk-8u171-linux-x64.tar.gz
tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz
1
2

2.移动文件到安装目录

mv /root/jdk1.8.0_171
/usr/java/
mv /root/elasticsearch-7.3.0   /usr/elasticsearch/
1
2
3

3.配置jdk环境变量

vim /etc/profile
1

在profile结尾添加如下内容:

JAVA_HOME=/usr/java
JRE_HOME=/usr/java/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASS_PATH PATH
1
2
3
4
5

让修改生效:

source /etc/profile
1

检查jdk

java -version
1

jdk配置完成!

# 7.2.2 配置Elasticsearch

1.编辑vim /usr/elasticsearch/config/elasticsearch.yml ,注意冒号后面有个空格。

vim /usr/elasticsearch/config/elasticsearch.yml
1

单机安装请取消注释:node.name: node-1,否则无法正常启动。

修改网络和端口,取消注释master节点,单机只保留一个node

node.name: node-1
network.host: 192.168.211.136
#
# Set a custom port for HTTP:
#
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
1
2
3
4
5
6
7

2.按需修改vim /usr/elasticsearch/config/jvm.options内存设置

vim /usr/elasticsearch/config/jvm.options
1

根据实际情况修改占用内存,默认都是1G,单机1G内存,启动会占用700m+然后在安装kibana

后,基本上无法运行了,运行了一会就挂了报内存不足。 内存设置超出物理内存,也会无法启

动,启动报错。

-Xms1g
-Xmx1g 
1
2

3.添加es用户,es默认root用户无法启动,需要改为其他用户

useradd estest
修改密码
passwd   estest
1
2
3

改变es目录拥有者账号

chown -R estest /usr/elasticsearch/
1

4.修改/etc/sysctl.conf

vim /etc/sysctl.conf
1

末尾添加:vm.max_map_count=655360

执行sysctl -p 让其生效

sysctl -p
1

5.修改/etc/security/limits.conf

vim /etc/security/limits.conf
1

末尾添加:

*               soft   nofile          65536
*               hard   nofile          65536
*               soft   nproc           4096
*               hard   nproc           4096
1
2
3
4

6.启动es

切换刚刚新建的用户

su estest
1

启动命令

/usr/elasticsearch/bin/elasticsearch
1

7.配置完成:浏览器访问测试。 ip:9200

Elasticsearch7x_Page10_001

上次更新: 2025/04/03, 11:07:08
FastDF文件存储
2 Elasticsearch入门使用

← FastDF文件存储 2 Elasticsearch入门使用→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式