Elasticsearch搜索引擎入门:从索引创建到查询优化
发布时间: 2024-05-23 23:57:03 阅读量: 80 订阅数: 94
Elasticsearch入门讲解
![Elasticsearch搜索引擎入门:从索引创建到查询优化](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4a43bfd130964406a962ca06406879eb~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?)
# 1. Elasticsearch概述**
Elasticsearch是一个开源的分布式搜索和分析引擎,基于Apache Lucene构建,具有以下主要特点:
* **分布式架构:**Elasticsearch可以横向扩展到多个节点,提供高可用性和可扩展性。
* **实时索引:**Elasticsearch允许在索引文档时立即进行搜索,从而实现近乎实时的搜索体验。
* **全文搜索:**Elasticsearch支持对文本字段进行全文搜索,并提供丰富的查询语法和过滤选项。
* **聚合和分析:**Elasticsearch提供强大的聚合和分析功能,可以对数据进行分组、计数和统计分析。
# 2. Elasticsearch数据模型
### 2.1 文档和字段
Elasticsearch 中的数据存储在称为**文档**的 JSON 对象中。每个文档都包含一个或多个**字段**,字段是文档中数据的特定属性或值。字段可以是不同的数据类型,包括字符串、数字、日期、布尔值和对象。
**示例文档:**
```json
{
"title": "Elasticsearch入门指南",
"author": "John Doe",
"date": "2023-03-08",
"content": "这是一篇关于Elasticsearch入门指南的文章。"
}
```
### 2.2 索引和类型
**索引**是 Elasticsearch 中存储文档的逻辑容器。它类似于关系数据库中的表,但更灵活,因为它允许文档具有不同的结构。每个索引由一个**名称**标识,并且可以包含多个**类型**。
**类型**是索引中文档的逻辑分组。它类似于关系数据库中的列,但更灵活,因为它允许文档具有不同的字段集。每个类型由一个**名称**标识,并且可以包含具有不同结构的文档。
**示例索引和类型:**
* 索引:`articles`
* 类型:`article`、`author`
### 2.2.1 文档ID和源
每个文档都有一个唯一的**文档ID**,用于标识文档。文档ID由 Elasticsearch 自动生成,但也可以手动指定。
文档的**源**是文档的原始 JSON 表示。它包含文档的所有字段及其值。
### 2.2.2 映射
**映射**定义了索引中文档的结构。它指定了每个字段的名称、数据类型和其他属性。映射在索引创建时定义,但可以在以后更改。
**示例映射:**
```json
{
"mappings": {
"article": {
"properties": {
"title": { "type": "text" },
"author": { "type": "keyword" },
"date": { "type": "date" },
"content": { "type": "text" }
}
}
}
}
```
### 2.2.3 索引生命周期
索引的生命周期包括以下阶段:
* **创建:**索引创建时,Elasticsearch 会根据指定的映射定义其结构。
* **写入:**文档可以添加到索引中,Elasticsearch 会根据映射验证并索引它们。
* **刷新:**刷新操作将未提交的文档写入磁盘,使其可供搜索。
* **提交:**提交操作将刷新后的文档持久化到磁盘,使其永久可用。
* **关闭:**关闭索引后,它不再接受新的文档,但仍然可以搜索。
* **删除:**删除索引后,它将从 Elasticsearch 中永久删除。
### 代码示例
**创建索引和映射:**
```python
from elasticsearch import Elasticsearch
es = Elasticsearch()
# 创建索引
es.indices.create(index="articles", body={
"mappings": {
"article": {
"properties": {
"title": { "type": "text" },
"author": { "type": "keyword" },
"date": { "type": "date" },
"content": {
```
0
0