ElasticSearch 索引是用来存储和组织文档的结构。在 ElasticSearch 中,索引操作包括创建索引、管理索引、删除索引、更新索引等。下面是对这些常见索引操作的详细解释。

1. 创建索引(Create Index)

创建索引是将文档结构和存储配置定义为索引的一部分。索引配置包括分片数、副本数、映射、分析器等。

创建索引的基本命令:

PUT /index_name

这将创建一个空的索引。你可以在请求中指定映射(Mappings)、设置(Settings)等。

示例:

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,          // 设置分片数
    "number_of_replicas": 2         // 设置副本数
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"               // 设置字段类型
      },
      "date": {
        "type": "date"               // 设置日期字段类型
      },
      "price": {
        "type": "float"              // 设置浮动类型字段
      }
    }
  }
}
  • settings:包含索引的配置,常见的设置有分片数(number_of_shards)、副本数(number_of_replicas)。
  • mappings:定义索引中字段的类型和属性。

2. 查看索引信息(Get Index)

通过 GET 请求,可以查看索引的配置信息、映射等。

示例:

GET /my_index

获取索引的设置:

GET /my_index/_settings

获取索引的映射:

GET /my_index/_mapping

3. 删除索引(Delete Index)

当不再需要某个索引时,可以删除索引。删除索引会永久删除其中的数据和配置。

示例:

DELETE /my_index

4. 更新索引设置(Update Index Settings)

索引创建后,有些设置是不可更改的,比如 number_of_shards。但可以修改某些动态设置,比如副本数、刷新间隔等。

示例:修改副本数

PUT /my_index/_settings
{
  "settings": {
    "number_of_replicas": 3
  }
}

5. 索引数据(Index Document)

将数据插入到索引中,通常我们称其为“文档”。每个文档由多个字段组成,每个字段具有名称和值。

示例:索引文档

POST /my_index/_doc/1
{
  "title": "Elasticsearch Guide",
  "date": "2023-12-01",
  "price": 29.99
}

在这个例子中,文档被存储在 my_index 索引中,文档ID为 1

可以使用PUT来指定文档ID:

PUT /my_index/_doc/1
{
  "title": "Updated Elasticsearch Guide",
  "date": "2023-12-02",
  "price": 19.99
}

6. 更新文档(Update Document)

如果文档已存在,可以部分更新文档内容。ElasticSearch支持通过 update API 来更新已有文档。

示例:

POST /my_index/_update/1
{
  "doc": {
    "price": 24.99
  }
}

7. 批量操作(Bulk Indexing)

在需要批量插入、更新或删除多个文档时,可以使用 Bulk API。该操作支持多个文档的索引、更新、删除等批量操作。

示例:批量索引

POST /my_index/_bulk
{ "index": { "_id": 1 } }
{ "title": "First Doc", "date": "2023-01-01", "price": 10 }
{ "index": { "_id": 2 } }
{ "title": "Second Doc", "date": "2023-02-01", "price": 15 }

每个操作(如 index, update, delete)后面跟着文档的内容。

8. 搜索索引(Search Index)

搜索是 ElasticSearch 最常见的操作之一。你可以使用查询(Query)语言来执行简单或复杂的搜索请求。

示例:简单的查询

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

示例:带有分页的查询

GET /my_index/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "match": {
      "title": "guide"
    }
  }
}
  • from:跳过的文档数(分页的起点)。
  • size:返回的文档数量。

示例:范围查询(Range Query)

GET /my_index/_search
{
  "query": {
    "range": {
      "date": {
        "gte": "2023-01-01",
        "lte": "2023-12-31"
      }
    }
  }
}

9. 映射(Mappings)操作

在索引中,映射定义了字段的数据类型、分析器等。你可以对已有索引的映射进行更新,但某些字段类型在映射创建后是不可修改的(例如,不能更改字段的类型)。

创建映射:

PUT /my_index/_mapping
{
  "properties": {
    "category": {
      "type": "keyword"
    }
  }
}

10. 索引别名(Alias)

索引别名允许你给一个索引起多个别名,便于管理和访问。

创建别名:

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_index",
        "alias": "my_index_alias"
      }
    }
  ]
}

11. 索引模板(Index Template)

索引模板允许你为新创建的索引定义默认设置和映射。模板会根据索引的名称模式进行匹配。

示例:创建索引模板

PUT /_template/my_template
{
  "index_patterns": ["log-*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "timestamp": {
        "type": "date"
      }
    }
  }
}

12. 索引优化(Force Merge)

索引优化可以通过合并多个段来减少存储空间,提高搜索效率。

示例:强制合并索引

POST /my_index/_forcemerge?max_num_segments=1

13. 索引恢复(Recovery)

ElasticSearch提供了恢复API,用于查看索引的恢复状态。

示例:查看索引恢复状态

GET /_recovery