这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
官网定义:
Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
相关概念:
ElasticSearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个 属性 。
| mysql | ElasticSearch |
|---|---|
| 数据库 | 索引 |
| 表 | 类型 |
| 行数据 | 文档 |
| 列数据 | 属性 |
安装部署
tar.gz 包
# 解压安装包
tar -zxvf elasticsearch-6.7.1.tar.gz
# 官方显示elasticsearch 运行必须是非root用户
# 创建用户组
groupadd elsearch
#创建用户到用户组
useradd elsearch -g elsearch -p elasticsearch
#将安装包中所有文件权限更改为非root用户
chown -R elsearch:elsearch elasticsearch-6.7.1
#配置
#修改配置文件 /conf/elasticsearch.yml
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
# 启动
su elsearch
sh ./bin/elasticsearch -d
可能出现问题
用户文件数量限制 65535
解决方案
vim /etc/security/limits.conf
将65535 改为65536
用户拥有的内存权限太小
解决方案
vim /etc/sysctl.conf
添加一行
vm.max_map_count=262144
上述解决方案都需要重启服务器
CRUD
增加:
查询
简单查询
查询id为1的员工
查询所有记录
搜索姓氏为 Smith 的雇员
- 方式一
- 方式二
高级查询
查询形式为smith,年龄在10-25
全文查询
搜索下所有喜欢攀岩(rock climbing)的雇员:
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
会得到多个结果,但是会在结果集中进行相应的关键字段排序
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.53484553,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 0.53484553,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "megacorp",
"_type": "employee",
"_id": "2",
"_score": 0.26742277,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [
"music"
]
}
}
]
}
}
短语搜索
仅匹配同时包含 “rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。