1. ES 介绍
Elasticsearch
, 简称
ES
,它是个开源分布式搜索引擎,它的特点有:分布式,零配
置,自动发现,索引自动分片,索引副本机制,
restful
风格接口,多数据源,自动搜
索负载等。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台
服务器,处理
PB
级别的数据。
es
也使用
Java
开发并使用
Lucene
作为其核心来实现
所有索引和搜索的功能,但是它的目的是通过简单的
RESTful API
来隐藏
Lucene
的
复杂性,从而让全文搜索变得简单。
Elasticsearch
是面向文档
(document oriented)
的,这意味着它可以存储整个对象或文
档
(document)
。然而它不仅仅是存储,还会索引
(index)
每个文档的内容使之可以被搜
索。在
Elasticsearch
中,你可以对文档(而非成行成列的数据)进行索引、搜索、排
序、过滤。
2. ES 安装
# 添加仓库秘钥
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch |
sudo apt-key add -
# 上边的添加方式会导致一个 apt-key 的警告,如果不想报警告使用下边这个
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo
gpg --no-default-keyring --keyring gnupgring:/etc/apt/trusted.gpg.d/icsearch.gpg --import
# 添加镜像源仓库
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable
main" | sudo tee /etc/apt/sources.list.d/elasticsearch.list
# 更新软件包列表
sudo apt update
# 安装 es
sudo apt-get install elasticsearch=7.17.21
# 启动 es
sudo systemctl start elasticsearch
# 安装 ik 分词器插件
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install
https://get.infini.cloud/elasticsearch/analysis-ik/7.17.21
安装问题解决方案
若 apt update 更新源报错:
root@root-host:~/workspace$ apt-key list
Warning: apt-key is deprecated. Manage keyring files in
trusted.gpg.d instead (see apt-key(8)).
/etc/apt/trusted.gpg ubuntu 希望将 apt-key 放到
/etc/apt/trusted.gpg.d/下而不是这个文件中
--------------------
pub rsa2048 2013-09-16 [SC]
4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4 注意最后
这 8 个字符
uid [ unknown] Elasticsearch (Elasticsearch Signing Key)
<dev_ops@elasticsearch.org>
sub rsa2048 2013-09-16 [E]
root@root-host:~$ sudo apt-key export D88E42B4 | sudo gpg --dearmour
-o /etc/apt/trusted.gpg.d/elasticsearch.gpg
完成后,查看/etc/apt/trusted.gpg.d/,应该已经将 apt-key 单独保存到目录
下了
启动 es 的时候报错:
# 调整 ES 虚拟内存,虚拟内存默认最大映射数为 65530,无法满足 ES 系统要求,
需要调整为 262144 以上
sysctl -w vm.max_map_count=262144
# 增加虚拟机内存配置
vim /etc/elasticsearch/jvm.options
# 新增如下内容
-Xms512m
-Xmx512m
3.验证 es
启动es
sudo systemctl start elasticsearch
查看es状态
systemctl status elasticsearch.service
验证
es
是否安装成功
curl -X GET "http://localhost:9200/"
设置外网访问:如果新配置完成的话,默认只能在本机进行访问。
vim /etc/elasticsearch/elasticsearch.yml
# 新增配置
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
4. 安装 kibana
Kibana 是一个开源的数据可视化和分析平台,主要用于将存储在 Elasticsearch 中的数据以直观的图表、仪表盘等形式展示出来。它是 Elastic Stack(原 ELK Stack)的核心组件之一,常用于日志分析、监控、业务指标可视化等场景。
安装 Kibana:
使用 apt 命令安装 Kibana。
sudo apt install kibana
配置 Kibana(可选):
根据需要配置 Kibana。配置文件通常位于 /etc/kibana/kibana.yml。可能需要
设置如服务器地址、端口、Elasticsearch URL 等。
sudo vim /etc/kibana/kibana.yml
例如,你可能需要设置 Elasticsearch 服务的 URL: 大概 32 行左右
elasticsearch.host: "http://localhost:9200"
启动 Kibana 服务:
安装完成后,启动 Kibana 服务。
sudo systemctl start kibana
设置开机自启(可选):
如果你希望 Kibana 在系统启动时自动启动,可以使用以下命令来启用自启动。
sudo systemctl enable kibana
验证安装:
使用以下命令检查 Kibana 服务的状态。
sudo systemctl status kibana
访问 Kibana:
在浏览器中访问 Kibana,通常是 http://<your-ip>:5601
5.ES客户端安装
# 克隆代码
git clone https://github.com/seznam/elasticlient
# 切换目录
cd elasticlient
# 更新子模块
git submodule update --init --recursive
# 编译代码
mkdir build
cd build
cmake ..
make
# 安装
make install
错误解决方案:
cmake
生成
makefile
的过程会遇到一个问题:
解决:需要安装
MicroHTTPD
库

sudo apt-get install libmicrohttpd-dev
make 的时候编译出错:这是子模块 googletest 没有编译安装
collect2: error: ld returned 1 exit status
make[2]: *** [external/httpmockserver/test/CMakeFiles/testserver.dir/build.make:105: bin/test-server] Error 1
make[1]: *** [CMakeFiles/Makefile2:675:
external/httpmockserver/test/CMakeFiles/test-server.dir/all] Error
2
make: *** [Makefile:146: all] Error 2
cd ../external/googletest/
mkdir cmake && cd cmake/
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make && sudo make install
安装好重新
cmake
即可
运行测试用例
make test

至此,
elasticlient
安装成功
6.ES核心概念
索引(Index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据
的索引,一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标
识(必须全部是小写字母的),并且当我们要对应于这个索引中的文档进行索引、搜索、
更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
类型(Type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分
类
/
分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。
比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这
个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,为评论数
据定义另一个类型
......
字段(Field)
字段相当于是数据表的字段,对文档数据根据不同属性进行的分类标识。
映射(mapping)
映射是在处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、
分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理
es
里面数据
的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需
要建立映射,并且需要思考如何建立映射才能对性能更好
文档 (document)
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某
一个产品的一个文档或者某个订单的一个文档。文档以
JSON
(
Javascript Object
Notation
)格式来表示,而
JSON
是一个到处存在的互联网数据交互格式。在一个
index/type
里面,你可以存储任意多的文档。一个文档必须被索引或者赋予一个索引
的
type
。
Elasticsearch
与传统关系型数据库相比如下:

7.Kibana 访问 es 进行测试
创建索引库
POST /user/_doc
{
"settings": {
"analysis": {
"analyzer": {
"ik": {
"tokenizer": "ik_max_word"
}
}
}
},
"mappings": {
"dynamic": true,
"properties": {
"nickname": {
"type": "text",
"analyzer": "ik_max_word"
},
"user_id": {
"type": "keyword",
"analyzer": "standard"
},
"phone": {
"type": "keyword",
"analyzer": "standard"
},
"description": {
"type": "text",
"enabled": false
},
"avatar_id": {
"type": "keyword",
"enabled": false
}
}
}
}
新增数据
查看并搜索数据
GET /user/_doc/_search
{
"query": {
"match_all": {}
}
}
删除索引:
DELETE /user
8.ES API简单使用
test.cpp
#include<elasticlient/client.h>
#include<cpr/cpr.h>
#include<iostream>
int main()
{
try
{
elasticlient::Client client({"http://127.0.0.1:9200/"});
auto rsp=client.search("user","_doc","{\"query\": {\"match_all\": {}}}");
std::cout<<rsp.status_code<<std::endl;
std::cout<<rsp.text<<std::endl;
}
catch(std::exception& e)
{
std::cerr<<"error:"<<std::endl;
std::cout<<e.what()<<std::endl;
return -1;
}
return 0;
}
makefile
main:main.cpp
g++ main.cpp -o main -std=c++17 -lcpr -lelasticlient
@PHONY:clean
clean:
rm -f main
至此大家就可以安装和基本使用ES 了。