Elasticsearch简介

Elasticsearch(简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理大规模数据集。它基于Apache Lucene库构建,并提供了一个简单易用的RESTful API,用于索引、搜索和分析数据。ES可以几乎实时地检索数据,具有良好的扩展性,可以扩展到上百台服务器,处理PB级别的数据。ES使用Java开发,其核心功能是通过简单的RESTful API隐藏Lucene的复杂性,使全文搜索变得简单。

es-简介.png


关键特性和概念

  1. 分布式架构:Elasticsearch使用分布式架构来处理大规模数据。它可以在多个节点上分布数据,并自动处理数据的分片和复制,以提供高可用性和可扩展性。
  2. 实时搜索:Elasticsearch能够实时地索引和搜索数据。它使用倒排索引的数据结构,可以快速地执行全文搜索、过滤和聚合操作。
  3. 多种数据类型支持:Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。它能够自动推断字段的数据类型,并提供了丰富的查询语法和过滤器来处理不同类型的数据。
  4. 强大的查询功能:Elasticsearch提供了丰富的查询语法和过滤器,可以进行复杂的搜索和过滤操作。它支持全文搜索、模糊搜索、通配符搜索、范围搜索等多种查询方式。
  5. 分布式聚合:Elasticsearch提供了强大的聚合功能,可以对数据进行分组、计数、求和、平均值、最大值、最小值等操作。这使得在大规模数据集上进行复杂的分析和统计变得非常高效。
  6. 实时数据分析:除了搜索功能,Elasticsearch还可以用于实时数据分析。它支持复杂的数据聚合和分析操作,可以帮助用户从海量数据中提取有价值的信息。
  7. 可扩展性和高可用性:Elasticsearch可以轻松地扩展到数百个节点,处理PB级的数据。它提供了自动的数据分片和复制机制,以保证数据的高可用性和容错性。
  8. 插件生态系统:Elasticsearch拥有丰富的插件生态系统,可以扩展其功能。用户可以根据自己的需求选择和安装各种插件,如监控插件、安全插件、可视化插件等。

使用场景

场景1:已经上线的系统的搜索功能改造

在已经上线的系统中,如果模块的搜索功能使用数据库查询实现,并且存在性能问题或者无法满足产品的高亮和相关度排序需求,可以考虑对系统进行技术改造,引入全文检索功能,其中Elasticsearch是一个很好的选择。改造的业务流程大致如下:

  1. 数据同步:将现有的数据从数据库中同步到Elasticsearch中,以便进行全文检索。可以使用Elasticsearch提供的API或者工具来实现数据的同步。
  2. 索引创建:定义Elasticsearch的索引结构,包括字段映射、分词器设置等。索引的创建可以通过Elasticsearch的API或者使用工具来完成。
  3. 数据搜索:通过调用Elasticsearch的API,在用户发起搜索请求时,将搜索关键词传递给Elasticsearch进行全文检索。Elasticsearch会返回与搜索关键词匹配的文档结果。
  4. 高亮显示:如果需要在搜索结果中高亮显示匹配的关键词,可以使用Elasticsearch提供的高亮功能。通过将搜索关键词和搜索结果进行匹配,可以在结果中标记出匹配的关键词并进行高亮显示。
  5. 相关度排序:Elasticsearch可以根据文档与搜索关键词的匹配程度进行相关度排序。可以根据业务需求设置相关度算法,并在搜索结果中按照相关度进行排序,以提供更准确的搜索结果。

es-场景1.png

场景2:新增加的模块的全文检索功能实现

对于一开始就要实现高亮、相关度排序等全文检索功能的模块,可以直接使用Elasticsearch来实现。业务流程大致如下:

  1. 索引创建:定义Elasticsearch的索引结构,包括字段映射、分词器设置等。索引的创建可以通过Elasticsearch的API或者使用工具来完成。
  2. 数据同步:将需要进行全文检索的数据同步到Elasticsearch中。可以在数据新增、修改或删除时,通过调用Elasticsearch的API将数据同步到相应的索引中。
  3. 数据搜索:通过调用Elasticsearch的API,在用户发起搜索请求时,将搜索关键词传递给Elasticsearch进行全文检索。Elasticsearch会返回与搜索关键词匹配的文档结果。
  4. 高亮显示:如果需要在搜索结果中高亮显示匹配的关键词,可以使用Elasticsearch提供的高亮功能。通过将搜索关键词和搜索结果进行匹配,可以在结果中标记出匹配的关键词并进行高亮显示。
  5. 相关度排序:Elasticsearch可以根据文档与搜索关键词的匹配程度进行相关度排序。可以根据业务需求设置相关度算法,并在搜索结果中按照相关度进行排序,以提供更准确的搜索结果。

es-场景2.png


软件下载

下载ES压缩包

TIPS:
Elasticsearch从版本5.0开始自带Java环境。在此之前的版本,用户需要自行安装Java环境并配置好相关的环境变量。从版本5.0开始,Elasticsearch的发行版本中包含了一个适用于Elasticsearch的Java运行时环境(JRE),这使得安装和运行Elasticsearch变得更加简单和便捷。请注意,尽管Elasticsearch自带了Java环境,但您仍然可以选择使用自己安装的Java环境来运行Elasticsearch。


软件安装

Window版

安装服务

Window版的Elasticsearch的安装很简单,类似Window版的Tomcat,解压开即安装完毕,解压后的Elasticsearch的目录结构如下

es-win.png

启动服务

点击Elasticsearch下的bin目录下的Elasticsearch.bat启动:

es-wind启动成功.png

鉴别是否启动成功
浏览器访问:http://localhost:9200/


Linux版

Elasticsearch不能以root用户身份运行。出于安全原因,不建议以root用户身份运行Elasticsearch,所以我们单独创建用户

创建用户(es)

 sudo adduser es

切换到新创建的用户

sudo su - es

查看当前目录(可选)

pwd

通过ftp或其他方式上传压缩包到目录
解压缩下载的软件包。使用以下命令解压缩软件包(完毕后记得删除)

tar -xzf elasticsearch-7.8.0-linux-x86_64.tar.gz

切换到config目录修改运行内存(可选)

#########切换目录
cd elasticsearch-7.8.0/config/
#########修改文件
vi jvm.options

es-修改内存.png

配置集群和访问ip

vim elasticsearch.yml



##########集群名称
cluster.name: my-application
##########节点名称
node.name: node-1
##########绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问
network.host: 0.0.0.0 
集群主机列表
discovery.seed_hosts: ["127.0.0.1"] 
##########设置在集群中的所有节点名称,目前是单机,放入一个节点即可
cluster.initial_master_nodes: ["node-1"]

es-修改配置文件.png

切换bin目录启动服务
ps:在启动 Elasticsearch 时,在命令行中添加 & 符号,将其放在命令的末尾,这样可以将 ES 进程放到后台运行,即使关闭了 shell 窗口,ES 仍然会继续运行

sh elasticsearch &

es-Linux启动成功.png

鉴别ES进程是否启动成功

curl -XGET http://localhost:9200/

tips

启动时报错显示:./elasticsearch-env: line 122: syntax error near unexpected token <

分析:这是因为bash 3.0后,shell中加入了新的符号"<<<",我们需要将 done < <(env) 修改为 done <<< 'env'

vim elasticsearch-env

启动时报错显示:max virtual memory areas vm.max_map_count 65530 is too low, increase to at least 262144

分析:报错原因是因为虚拟内存太低,所以我们的解决办法是增加虚拟内存

############ 使用有权限的账户修改
vim /etc/sysctl.conf



############ 使配置生效
sysctl -p


整体大致流程如下图所示

es-Linux流程一览.png

Last modification:June 3, 2024
如果觉得我的文章对你有用,您可以给博主买一杯果汁,谢谢!