赞
踩
Elasticsearch 提供了丰富的 RESTful API 用于管理和操作索引,包括创建、查询、更新、删除等操作。以下是对 Elasticsearch 索引 API 的实战指南,涵盖了关键操作的示例和说明:
创建一个新的索引时,需要指定索引名,并可以提供索引的配置(如分片数、副本数)、映射(字段类型、分析器等)以及其它设置。
请求格式:
PUT /<index_name> { "settings": { "number_of_shards": <shard_count>, "number_of_replicas": <replica_count>, ...其它设置... }, "mappings": { "<doc_type>" : { "properties": { "<field_name>": { "type": "<field_type>", ...其它字段属性... }, ...其它字段... } } }, ...可能包含的其它部分(如 aliases、warmers)... }
<index_name>
:要创建的索引名称。settings
:索引级别的配置,如分片数(number_of_shards
)、副本数(number_of_replicas
)等。mappings
:定义索引中文档类型(doc_type
)及其字段(field_name
)的数据类型(field_type
)和分析器等属性。从 Elasticsearch 7.x 版本开始,单个索引内不再支持多个文档类型,所以通常只定义一个默认类型(可以省略类型名)。<shard_count>
和 <replica_count>
:分别表示主分片数量和副本分片数量,根据集群规模和数据分布需求设置。示例:
PUT /my_index { "settings": { "number_of_shards": 3, "number_of_replicas": 2 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text", "analyzer": "english" }, "published_date": { "type": "date" } } } }
获取指定索引的基本信息,包括设置、映射、状态等。
请求格式:
GET /<index_name>
示例:
GET /my_index
修改已存在索引的部分或全部设置。
请求格式:
PUT /<index_name>/_settings
{
"<setting_key>": "<new_value>",
...其它设置项...
}
示例:更改副本数:
PUT /my_index/_settings
{
"number_of_replicas": 1
}
删除指定的索引及其所有数据。
请求格式:
DELETE /<index_name>
示例:
DELETE /my_index
除了直接操作单个索引,Elasticsearch 还支持创建索引模板,用于自动应用预定义的设置和映射到符合特定模式的新建索引上。
创建模板:
PUT _template/<template_name>
{
"index_patterns": ["<pattern>"],
"settings": { ... },
"mappings": { ... },
...其它部分...
}
示例:
PUT _template/my_template { "index_patterns": ["logs-*"], "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "@timestamp": { "type": "date" }, "message": { "type": "text" } } } }
对于 Java 开发者,可以利用官方提供的 Java High Level REST Client 或者更现代的 Java Low Level REST Client 来创建索引。以下是一个使用 High Level REST Client 的简例:
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; public class CreateIndexExample { public static void main(String[] args) throws Exception { RestHighLevelClient client = // 初始化客户端实例... XContentBuilder mappingBuilder = XContentFactory.jsonBuilder() .startObject() .startObject("properties") .startObject("title") .field("type", "text") .endObject() .startObject("content") .field("type", "text") .field("analyzer", "english") .endObject() .startObject("published_date") .field("type", "date") .endObject() .endObject() .endObject(); CreateIndexRequest request = new CreateIndexRequest("my_index"); request.settings(Settings.builder() .put("number_of_shards", 3) .put("number_of_replicas", 2)); request.mapping(mappingBuilder); CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println("Index created: " + response.isAcknowledged()); } }
以上实战指南覆盖了 ElasticSearch 索引 API 的核心操作,包括使用 HTTP 请求直接操作和通过 Java 客户端编程接口进行索引管理。实际使用中,应结合具体业务需求和 Elasticsearch 版本特性进行相应的调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。