阅读es文档

This commit is contained in:
asahi
2024-10-04 21:07:06 +08:00
parent c8d37b3e2f
commit 3517559617

View File

@@ -0,0 +1,110 @@
# ElasticSearch
## 简介
ElasticSearch是一个分布式的搜索和分析引擎、可缩放的数据存储、矢量数据库vector database
### 用例场景
如下是ElasticSearch的用例场景
- 日志es可以用于收集、存储和分析日志
- full-text search通过倒排索引es可以用于构建全文本搜索方案
### 安装
下列安装示例基于Ubuntu 22.04
#### add elasticsearch GPG keys
```bash
wget -q https://artifacts.elastic.co/GPG-KEY-elasticsearch -O- | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
```
#### Add Elasticsearch 8.x APT Repository
```bash
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
```
#### install elastic search
```bash
sudo apt update && sudo apt install elasticsearch
```
### Indices, documents, and fields
在ES中index是存储的基本单元是存储数据的逻辑namespace位于同一index下的存储数据共享相似的特征。
在ES服务部署之后需要创建index并在index中存储数据。
index是一系列document的集合通过`name``alias`唯一标识,在查询或其他操作中,通过`unique name`来定位index。
#### Documents and fields
ElasticSearch以json文档的格式来序列化和存储数据。一个document是fields的集合field则是对应的key-value pair。每个document都有一个唯一的id文档id可以手动指定也可以让ES自动生成。
一个ES文档的格式如下所示
```json
{
"_index": "my-first-elasticsearch-index",
"_id": "DyFpo5EBxE8fzbb95DOa",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [
"dolphins",
"whales"
]
},
"join_date": "2024/05/01"
}
}
```
#### metadata field
一个indexed document包含data和metadata。
metadata fields为系统fields用于存储document的相关信息在elastic search中metadata field以下划线`_`开头例如如下field为metadata field
- `_id`文档id文档id在每个index中都是唯一的
- `_index`标识该文档存储在哪个index中
#### Mappings and data types
每个index都有mapping或schema用于指定document中的fields如何被索引。
一个`mapping`定义了每个field的data type以及该field如何被索引、该field如何被存储。
在将document添加到index时对于`mapping`有如下两种选择:
- `Dynamic Mapping`让ES自动检测data type并创建mapping。在引入dynamic mapping后可能会针对某些用例场景产生次优结果
- `Explicit Mapping`针对每个field手动指定data type
### 向ElasticSearch中添加数据
#### General content
General content是不包含时间戳的数据对于general content可以通过如下方式添加到ES中
- API可以通过HTTP API向ES中添加数据
#### Timestamped data
Timestamped data代表包含timestamp field的数据如果使用了`Elastic Common Schema(ECS)`那么timestamp field的名称为`@timestamp`,这些数据可能是`logs, metrics, traces`
### 查询和分析数据
可以通过如下方式来查询和分析数据
#### Rest Api
可以通过rest api来管理elastic search集群并索引和查询数据。
#### query language
ES提供了多种查询语言来和数据进行交互
- Query DSL: ES主要的查询语言
- ES|QL: 8.11中新增的piped query language和计算引擎
##### Query DSL
query DSL是一种json格式的查询语言支持复杂的查询、过滤、聚合操作是ES最原始也是功能最强的查询语言
`_search` endpoint接收Query DSL格式的查询
query DSL支持如下查询
- 全文本搜索:搜索已经被分析和索引过的文本,支持短语或临近查询、模糊匹配等
- 关键词查询:支持精确的关键词匹配
- 语义查询
- 向量查询
- 地理位置查询