Elasticsearch实战教程: 如何在海量级数据中进行快速搜索


🎬 鸽芷咕个人主页
🔥 个人专栏 : 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!


引入

  Elasticsearch(简称ES)是一个基于Apache Lucene™的开源搜索引擎,无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。几天我们就来体验一下如何在海量数据中快速进行搜索。

文章目录

一、环境搭建

首先,在使用 Elasticsearch 之前,我们需要先安装好服务,操作也很简单。

本次我们选择我们采用CentOS7来部署 ElasticSearch 服务。

登录https://www.elastic.co/cn/downloads/elasticsearch,选择相应的系统环境下载软件包,这里我用的操作系统是CentOS,所以选择Linux环境。

1.1、安装JDK

Elasticsearch 是用 Java 语言开发的,所以在安装之前,需要先安装一下JDK

java 复制代码
yum -y install java-1.8.0-openjdk

查看java安装情况

java 复制代码
java -version

1.2、安装ElasticSearch

进入到对应上传的文件夹,安装ElasticSearch

java 复制代码
rpm -ivh elasticsearch-6.1.0.rpm

查找安装路径

java 复制代码
rpm -ql elasticsearch

一般是装在/usr/share/elasticsearch/下。

1.3、设置data的目录

创建/data/es-data目录,用于elasticsearch数据的存放

java 复制代码
mkdir -p /data/es-data

修改该目录的拥有者为elasticsearch

java 复制代码
chown -R elasticsearch:elasticsearch /data/es-data

1.4、设置log的目录

java 复制代码
mkdir -p /log/es-log

修改该目录的拥有者为elasticsearch

java 复制代码
chown -R elasticsearch:elasticsearch /log/es-log

1.5、修改配置文件elasticsearch.yml

java 复制代码
vim /etc/elasticsearch/elasticsearch.yml

修改如下内容:

java 复制代码
#设置节点名称
cluster.name: my-es

#设置data存放的路径为/data/es-data
path.data: /data/es-data

#设置logs日志的路径为/log/es-log
path.logs: /log/es-log

#设置内存不使用交换分区,配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明
bootstrap.memory_lock: false

#设置允许所有ip可以连接该elasticsearch
network.host: 0.0.0.0

#开启监听的端口为9200
http.port: 9200

#增加新的参数,为了让elasticsearch-head插件可以访问es (5.x版本,如果没有可以自己手动加)
http.cors.enabled: true
http.cors.allow-origin: "*"

1.6、启动elasticsearch

启动

复制代码
systemctl start elasticsearch

查看状态

复制代码
systemctl status elasticsearch

设置开机启动

复制代码
systemctl enable elasticsearch

启动成功之后,测试服务是否开启

复制代码
curl -X GET http://localhost:9200

同时也可以远程测试一下,如果网络被拒绝,检查防火墙是否开启

复制代码
#查询防火墙状态
firewall-cmd --state

如果状态是active表示已经开启,可以将其关闭

复制代码
#关闭防火墙
systemctl stop firewalld.service

如果不想开机启动,可以输入如下命令

复制代码
#禁止firewall开机启动
systemctl disable firewalld.service

二、创建数据索引

在Elasticsearch中,数据是以JSON格式存储的。首先,我们需要创建一个索引,索引相当于一个数据集合,它可以包含一个或多个类型(type)。

2.1创建 my_index的索引

java 复制代码
PUT /my_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { "type": "text" }
    }
  }
}

在上面的例子中,我们创建了一个名为my_index的索引,并设置了分片数为1,副本数为0。同时,我们定义了两个字段titlecontent,它们的类型都是文本。

三. 进行数据导入

接下来,我们需要将数据导入到Elasticsearch中。可以使用POST请求和bulk API来实现。

java 复制代码
POST /my_index/_bulk
{ "index": { "_id": 1 } }
{ "title": "Elasticsearch教程", "content": "这是一篇关于Elasticsearch的教程。" }
{ "index": { "_id": 2 } }
{ "title": "Elasticsearch实战", "content": "这是一篇关于Elasticsearch实战的教程。" }

四、 进行数据搜索

现在,我们的数据已经导入到Elasticsearch中,可以使用GET请求来搜索数据。

java 复制代码
GET /my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

上面的例子中,我们使用了一个简单的匹配查询来搜索标题中包含"Elasticsearch"的文档。

总结

在本教程中,我们学习了如何在Elasticsearch中创建索引、导入数据、进行数据搜索以及一些性能优化建议。希望这些内容能够帮助您在海量级数据中实现快速搜索。

相关推荐
RoboWizard1 小时前
三星和金士顿内存条哪个更适合游戏超频
大数据·人工智能
深圳市恒星物联科技有限公司2 小时前
轻量MCU设备通过OpenHarmony兼容性测评的全流程关键要点与实战踩坑经验
大数据·人工智能·物联网·鸿蒙
TDengine (老段)2 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Leo.yuan4 小时前
盘点2026十大主流国产数据仓库软件:从开源到商业,企业级怎么选?
大数据
长谷深风1114 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
大大大大晴天5 小时前
元数据之后,数据治理该做什么:标准、指标与主数据
大数据
移动云开发者联盟6 小时前
AI重塑短剧生产!移动云×咪咕 AIGC内容创作平台正式发布
大数据·人工智能
其实防守也摸鱼7 小时前
Codex 下载与本地部署实战:从安装到运行全指南
android·大数据·运维·安全·自动化
shujudang8 小时前
零售客户分析平台的四种路径:身份关联、分析模型与系统对接
大数据·人工智能·数据分析
新闻码图9 小时前
运维数据治理是什么?和业务数据治理有什么区别?
大数据