Elasticsearch简介
Elasticsearch(简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理大规模数据集。它基于Apache Lucene库构建,并提供了一个简单易用的RESTful API,用于索引、搜索和分析数据。ES可以几乎实时地检索数据,具有良好的扩展性,可以扩展到上百台服务器,处理PB级别的数据。ES使用Java开发,其核心功能是通过简单的RESTful API隐藏Lucene的复杂性,使全文搜索变得简单。
关键特性和概念
- 分布式架构:Elasticsearch使用分布式架构来处理大规模数据。它可以在多个节点上分布数据,并自动处理数据的分片和复制,以提供高可用性和可扩展性。
- 实时搜索:Elasticsearch能够实时地索引和搜索数据。它使用倒排索引的数据结构,可以快速地执行全文搜索、过滤和聚合操作。
- 多种数据类型支持:Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。它能够自动推断字段的数据类型,并提供了丰富的查询语法和过滤器来处理不同类型的数据。
- 强大的查询功能:Elasticsearch提供了丰富的查询语法和过滤器,可以进行复杂的搜索和过滤操作。它支持全文搜索、模糊搜索、通配符搜索、范围搜索等多种查询方式。
- 分布式聚合:Elasticsearch提供了强大的聚合功能,可以对数据进行分组、计数、求和、平均值、最大值、最小值等操作。这使得在大规模数据集上进行复杂的分析和统计变得非常高效。
- 实时数据分析:除了搜索功能,Elasticsearch还可以用于实时数据分析。它支持复杂的数据聚合和分析操作,可以帮助用户从海量数据中提取有价值的信息。
- 可扩展性和高可用性:Elasticsearch可以轻松地扩展到数百个节点,处理PB级的数据。它提供了自动的数据分片和复制机制,以保证数据的高可用性和容错性。
- 插件生态系统:Elasticsearch拥有丰富的插件生态系统,可以扩展其功能。用户可以根据自己的需求选择和安装各种插件,如监控插件、安全插件、可视化插件等。
使用场景
场景1:已经上线的系统的搜索功能改造
在已经上线的系统中,如果模块的搜索功能使用数据库查询实现,并且存在性能问题或者无法满足产品的高亮和相关度排序需求,可以考虑对系统进行技术改造,引入全文检索功能,其中Elasticsearch是一个很好的选择。改造的业务流程大致如下:
- 数据同步:将现有的数据从数据库中同步到Elasticsearch中,以便进行全文检索。可以使用Elasticsearch提供的API或者工具来实现数据的同步。
- 索引创建:定义Elasticsearch的索引结构,包括字段映射、分词器设置等。索引的创建可以通过Elasticsearch的API或者使用工具来完成。
- 数据搜索:通过调用Elasticsearch的API,在用户发起搜索请求时,将搜索关键词传递给Elasticsearch进行全文检索。Elasticsearch会返回与搜索关键词匹配的文档结果。
- 高亮显示:如果需要在搜索结果中高亮显示匹配的关键词,可以使用Elasticsearch提供的高亮功能。通过将搜索关键词和搜索结果进行匹配,可以在结果中标记出匹配的关键词并进行高亮显示。
- 相关度排序:Elasticsearch可以根据文档与搜索关键词的匹配程度进行相关度排序。可以根据业务需求设置相关度算法,并在搜索结果中按照相关度进行排序,以提供更准确的搜索结果。
场景2:新增加的模块的全文检索功能实现
对于一开始就要实现高亮、相关度排序等全文检索功能的模块,可以直接使用Elasticsearch来实现。业务流程大致如下:
- 索引创建:定义Elasticsearch的索引结构,包括字段映射、分词器设置等。索引的创建可以通过Elasticsearch的API或者使用工具来完成。
- 数据同步:将需要进行全文检索的数据同步到Elasticsearch中。可以在数据新增、修改或删除时,通过调用Elasticsearch的API将数据同步到相应的索引中。
- 数据搜索:通过调用Elasticsearch的API,在用户发起搜索请求时,将搜索关键词传递给Elasticsearch进行全文检索。Elasticsearch会返回与搜索关键词匹配的文档结果。
- 高亮显示:如果需要在搜索结果中高亮显示匹配的关键词,可以使用Elasticsearch提供的高亮功能。通过将搜索关键词和搜索结果进行匹配,可以在结果中标记出匹配的关键词并进行高亮显示。
- 相关度排序:Elasticsearch可以根据文档与搜索关键词的匹配程度进行相关度排序。可以根据业务需求设置相关度算法,并在搜索结果中按照相关度进行排序,以提供更准确的搜索结果。
软件下载
下载ES压缩包
TIPS:
Elasticsearch从版本5.0开始自带Java环境。在此之前的版本,用户需要自行安装Java环境并配置好相关的环境变量。从版本5.0开始,Elasticsearch的发行版本中包含了一个适用于Elasticsearch的Java运行时环境(JRE),这使得安装和运行Elasticsearch变得更加简单和便捷。请注意,尽管Elasticsearch自带了Java环境,但您仍然可以选择使用自己安装的Java环境来运行Elasticsearch。
软件安装
安装服务
Window版的Elasticsearch的安装很简单,类似Window版的Tomcat,解压开即安装完毕,解压后的Elasticsearch的目录结构如下
启动服务
点击Elasticsearch下的bin目录下的Elasticsearch.bat启动:
鉴别是否启动成功
浏览器访问:http://localhost:9200/
创建用户(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
配置集群和访问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"]
切换bin目录启动服务
ps:在启动 Elasticsearch 时,在命令行中添加 & 符号,将其放在命令的末尾,这样可以将 ES 进程放到后台运行,即使关闭了 shell 窗口,ES 仍然会继续运行
sh elasticsearch &
鉴别ES进程是否启动成功
curl -XGET http://localhost:9200/
tips
<
分析:这是因为bash 3.0后,shell中加入了新的符号"<<<",我们需要将 done < <(env) 修改为 done <<< 'env'
vim elasticsearch-env
分析:报错原因是因为虚拟内存太低,所以我们的解决办法是增加虚拟内存
############ 使用有权限的账户修改
vim /etc/sysctl.conf
############ 使配置生效
sysctl -p
整体大致流程如下图所示