ElasticSearch
The Elastic Stack,包括 Elasticsearch、Logstash、Kibana 和 Beats,也简称为ELK Stack,能够安全可靠地存储、搜索和可视化数据。
其中 Elasticsearch,简称ES,是一个开源的高扩展的分布式全文搜索引擎,也是 ELK Stack 的核心,负责近乎实时的存储和搜索数据,此外还能用于监控与分析。
Lucene 提供了一个全文搜索引擎的实现,需要搭配完整的服务框架进行应用。而 Elasticsearch 则是 Lucene 的一个分布式实现,它把索引和搜索功能封装成RESTful API,使其易上手易扩展。
📌 数据格式
Elasticsearch 是面向文档型数据库,一条数据在这里是指一个文档,文档可以包含多个字段,每个字段可以包含多个值。
- Index-索引,类似Database-数据库。
- Type-类型,类似Table-表;该概念被逐渐弱化,7.X版本已被删除。
- Document-文档,类似Row-行。
- Field-字段,类似Column-列。
正排索引,通过 key 找 value
倒排索引,分词,通过 value 找 key
📌 索引操作
🚁 创建索引
PUT: http://localhost:9200/index_name
PUT协议具有幂等性,重复发送时要求返回相同的结果。
🚁 查询指定索引
GET: http://localhost:9200/index_name
🚁 查询所有索引
GET: http://localhost:9200/_cat/indices?v
🚁 删除索引
DELETE: http://localhost:9200/index_name
📌 文档操作
🚁 创建文档
POST: http://localhost:9200/index_name/_doc
{ "json_field": "json_value" }
此时返回结果的"_id"即为文档的ID,随机生成的唯一标识。
保存时es会将文本分词,并建立倒排索引。
🔧 创建文档,并指定_id
POST: http://localhost:9200/index_name/_create/1001
{ "json_field": "json_value" }
此时返回结果的"_id"即1001,用户自定义的ID。
🚁 修改文档
🔧 全量更新
PUT: http://localhost:9200/index_name/_doc/1001
{ "json_field": "json_value1" }
🔧 局部更新
POST: http://localhost:9200/index_name/_update/1001
{ "doc": { "json_field": "json_value1" } }
🚁 删除文档
DELETE: http://localhost:9200/index_name/_doc/1001
🚁 查询文档
🔧 根据主键查询
GET: http://localhost:9200/index_name/_doc/1001
🔧 查询索引下所有文档
GET: http://localhost:9200/index_name/_search
🔧 条件查询
GET: http://localhost:9200/index_name/_search?q=json_field:json_value
或者使用请求体传参数
GET: http://localhost:9200/index_name/_search
{ "query": { "match": { "json_field": "json_value" } }
🔧 分页与排序
GET: http://localhost:9200/index_name/_search
{
"query": {
"match_all": {},
"from": 0,
"size": 10,
"_source": [ // 限制返回的字段
"json_field"
],
"highlight": { // 高亮显示
"fields": {
"json_field": {}
}
},
"sort": [
{
"json_field": "desc"
}
]
}
}
🔧 多条件查询
GET: http://localhost:9200/index_name/_search
{
"query": {
"bool": {
"must": [ // must类似于and,should类似于or
{
"match": { // 全文检索匹配,查询时关键字会进行分词
"json_field": "json_value"
}
},
{
"match_phrase": { // 完全匹配
"json_field1": "json_value1"
}
}
],
"filter": {
"range": { // 范围查询
"num": {
"gt": 100
}
}
}
}
}
}
🔧 聚合查询
GET: http://localhost:9200/index_name/_search
{
"aggs": {
// "field_group": {
// "terms": { // 分组
// "field": "json_field"
// }
// },
"field_avg": {
"avg": { // 平均值
"field": "json_field"
}
}
},
"size": 0 // 不返回文档,只返回聚合结果
}
🚁 设置映射关系
PUT: http://localhost:9200/index_name/_mapping
{
"properties": {
"json_field1": {
"type": "text", // 允许查询时分词效果
"index": "true"
},
"json_field2": {
"type": "keyword", // 设置为关键字,不能分词;即必须完全匹配
"index": "true"
},
"json_field3": {
"type": "keyword", // false-不能用该字段进行查询
"index": "false"
}
}
}
📌 查看集群状态
GET: http://localhost:port/_cluster/health
📌 Kibana
数据可视化、实时查询、系统监控、日志分析