做建材上哪个网站比较好,网站备案局,企业网站建公司,腾讯云网站建设流程5分钟上手ES的具体使用
相信有很多同学想要去学习elk时会使用docker等一些方式去下载相关程序#xff0c;但提到真正去使用es的一系列操作时又会知之甚少。于是这一篇博客应运而生。
本文就以下载好elk/efk系统后应该如何去使用为例#xff0c;介绍es的具体操作。
es关键字…5分钟上手ES的具体使用
相信有很多同学想要去学习elk时会使用docker等一些方式去下载相关程序但提到真正去使用es的一系列操作时又会知之甚少。于是这一篇博客应运而生。
本文就以下载好elk/efk系统后应该如何去使用为例介绍es的具体操作。
es关键字基本概念
索引Index类似于关系型数据库中的“数据库”是数据存储的容器。
文档Document类似于关系型数据库中的“行”是 JSON 格式的数据单位。
字段Field类似于“列”每个文档由多个字段组成。
举个例子
{index: library,document: {id: 1,title: Elasticsearch Basics,author: John Doe,published_date: 2024-01-01,pages: 300,categories: [Technology, Databases]}
}说明索引library 是索引的名称。
文档这条记录是一个书籍文档文档 ID 为 1。
字段
title标题“Elasticsearch Basics”author作者“John Doe”published_date出版日期“2024-01-01”pages页数300categories类别[“Technology”, “Databases”]
类似关系型数据库的对比
Elasticsearch 索引 ≈ 数据库中的 数据库。Elasticsearch 文档 ≈ 数据库中的 行。Elasticsearch 字段 ≈ 数据库中的 列。
现在应该对es的基础结构有了大概的了解。
然后是如何去创建这些索引文档字段呢
es封装好了很多的方法可以直接使用api进行请求非常方便。
常用的
创建一个名为 my_index 的索引
curl -X PUT localhost:9200/my_index(X的意思是指定HTTP请求的方法)如GETPOSTPUTDELETE等
以下为了展示更清晰使用kibana中携带的开发工具去展示教程
展示es集群状态
GET _cluster/health
返回示例值
{cluster_name: elasticsearch,status: green, // 集群状态green 表示所有节点都正常number_of_nodes: 3
}
创建索引
先以最基础的create来了解es的结构
创建一个新的索引 my_index并定义它的字段。
titleText类型 published_date:date类型authorkeyword类型。
PUT /my_index
{mappings: {properties: {title: {type: text},published_date: {type: date},author: {type: keyword}}}
}
mappings映射是一个描述文档字段以及字段类型的定义。类似于关系型数据库中的“表结构”或“schema”它告诉 Elasticsearch 每个字段是什么类型应该如何处理和索引这些字段的数据。
properties是 mappings 的子级它定义了文档中每个字段的名称和类型。每个字段的类型决定了 Elasticsearch 如何存储、索引和查询该字段的数据。
既然讲到创建那就将es中常用的数据类型和应用场景说一下
text
用途用于需要全文搜索的字段。text 类型的数据会被分析分词以便进行全文检索。应用场景文章标题、内容描述、评论等。
keyword
用途用于精确匹配的字段。keyword 类型的数据不会被分词适合用于过滤、排序、聚合等操作。应用场景分类标签、用户 ID、国家代码等。
date
用途用于存储日期和时间类型的数据。Elasticsearch 可以对 date 字段进行范围查询、排序和聚合操作。应用场景发布日期、创建时间、更新时间等。
integer
用途用于存储整型数据。适合需要存储整数类型的数据。应用场景年龄、订单编号、库存数量等。
float、double
用途用于存储浮点数。float 用于单精度浮点数double 用于双精度浮点数。应用场景价格、评分、地理坐标等。
boolean
用途用于存储布尔值true 或 false。应用场景激活状态、是否管理员、是否完成等。
nested
用途用于存储嵌套对象。它允许存储结构化的对象数组并且可以对每个对象中的字段进行独立查询。应用场景评论中的回复、订单中的商品列表等。
示例
comments: {type: nested,properties: {user: { type: keyword },comment: { type: text },date: { type: date }}
}object 用途用于存储 JSON 对象。与 nested 不同object 字段无法对嵌套对象进行独立查询但更适合存储简单的对象数据。 应用场景用户地址、配置参数等。
示例
address: {type: object,properties: {street: { type: text },city: { type: keyword }}
}geo_point
用途用于存储地理坐标经纬度。可以进行地理位置相关的查询如范围搜索和距离计算。应用场景地点、用户位置、商店位置等。
ip
用途用于存储 IP 地址IPv4 和 IPv6。适合用于记录和查询网络请求相关的数据。应用场景用户访问日志、服务器 IP 地址等。
比较常用的总结来说的话 text 类型适合需要进行全文搜索的字段如博客内容、产品描述。 keyword 类型适合需要精确匹配、聚合或排序的字段如用户名、产品 ID、标签。 date 类型适合需要进行时间范围查询的字段如创建时间、修改时间。 integer 和 float 类型适合需要进行数值计算或比较的字段如产品价格、库存数量、评分。 nested 类型适合存储并查询复杂的嵌套数组数据如订单中的商品列表或评论的回复。 常见命令
创建索引 PUT
我们再回到常见命令的学习重新看一下创建索引的命令
PUT /my_index
{mappings: {properties: {title: {type: text},published_date: {type: date},author: {type: keyword}}}
}
现在就知道为什么要选这几种类型了。
插入文档POST
既然创建了索引自然就要插入数据
POST /my_index/_doc/1
{title: Elasticsearch Basics,published_date: 2024-01-01,author: John Doe
}
我们发现es的命令基本都是json格式的在以后开发时也要注意。
_doc就表示文档的意思1文档的 ID。
获取文档GET
从指定索引中获取文档ID为1的文档
GET /my_index/_doc/1示例
{_index: my_index,_id: 1,_source: {title: Elasticsearch Basics,published_date: 2024-01-01,author: John Doe}
}更新文档 _update
POST /my_index/_update/1
{doc: {title: Advanced Elasticsearch}
}
_update命令是局部更新并不需要提供完整的文档
删除文档:DELETE
删除ID为1的文档
DELETE /my_index/_doc/1搜索文档:_search
GET /my_index/_search
{query: {match: {title: Elasticsearch}}
}
返回示例
{hits: {total: {value: 1},hits: [{_source: {title: Elasticsearch Basics,published_date: 2024-01-01,author: John Doe}}]}
}
搜索参数中:match为全文搜索查询title 字段中包含 “Elasticsearch” 的文档将会被返回。
批量操作_bulk
该方式很高效
插入示例
POST /_bulk
{ index: { _index: my_index, _id: 2 }}
{ title: Learning Elasticsearch, published_date: 2023-01-01, author: Jane Doe }
{ index: { _index: my_index, _id: 3 }}
{ title: Mastering Elasticsearch, published_date: 2022-01-01, author: Jake Doe }
注意批量插入数据时每个文档必须包含一行操作说明和一行数据。
聚合查询
统计索引中文档的作者数量
GET /my_index/_search
{size: 0,aggs: {authors: {terms: {field: author.keyword}}}
}
返回示例
{aggregations: {authors: {buckets: [{key: John Doe,doc_count: 1},{key: Jane Doe,doc_count: 1}]}}
}
注意
aggregations聚合用于对数据进行统计、分组、分析。terms 聚合按字段值对文档进行分组。
本篇博客大致就这些内容之后会讲解elk/efk系统对接主流系统的操作(.log,nginx,mysql等等)。欢迎关注。