Python Elasticsearch操作指南:从创建索引到数据写入

20 下载量 191 浏览量 更新于2024-08-31 收藏 107KB PDF 举报
"这篇文档详细阐述了如何使用Python与Elasticsearch进行交互,从创建索引到写入数据的步骤。主要关注点在于利用Python的Elasticsearch库来操作ES实例,包括设置映射(mappings)以及向索引中添加数据。" 在Python中,与Elasticsearch进行交互首先需要导入Elasticsearch模块。以下代码展示了如何连接到一个运行在`192.168.1.1:9200`的Elasticsearch实例: ```python from elasticsearch import Elasticsearch es = Elasticsearch('192.168.1.1:9200') ``` 创建索引是通过`indices.create()`方法实现的。在本例中,我们创建了一个名为`index_test`的索引,并定义了其映射结构。映射定义了每个字段的数据类型和索引行为。下面是一个示例映射定义: ```python mappings = { "mappings": { "type_doc_test": { # type_doc_test为doc_type "properties": { "id": {"type": "long", "index": "false"}, "serial": {"type": "keyword", "index": "false"}, "tags": { "type": "object", "properties": { "content": {"type": "keyword", "index": True}, "dominant_color_name": {"type": "keyword", "index": True}, "skill": {"type": "keyword", "index": True}, }, }, "hasTag": {"type": "long", "index": True}, "status": {"type": "long", "index": True}, "createTime": { "type": "date", "format": "yyyy-MM-ddHH:mm:ss||yyyy-MM-dd||epoch_millis", }, "updateTime": { "type": "date", "format": "yyyy-MM-ddHH:mm:ss||yyyy-MM-dd||epoch_millis", }, }, } } } ``` 映射中的字段类型有: - `id`:定义为`long`类型,且`index`设为`false`,表示该字段不会被索引。 - `serial`:同样为`keyword`类型,不被索引。 - `tags`:是对象类型,其子字段`content`、`dominant_color_name`和`skill`都是可被索引的`keyword`类型。 - `hasTag`、`status`:为`long`类型,会被索引。 - `createTime`、`updateTime`:为日期类型,使用多种格式,包括`yyyy-MM-ddHH:mm:ss`、`yyyy-MM-dd`和毫秒级时间戳。 创建索引的代码如下: ```python res = es.indices.create(index='index_test', body=mappings) ``` 写入数据至已创建的索引中,需要根据所定义的映射结构构造相应的JSON文档,然后使用`index()`方法: ```python doc = { "id": 1, "serial": "serial1", "tags": { "content": "tag content", "dominant_color_name": "red", "skill": "programming", }, "hasTag": 1, "status": 0, "createTime": "2022-01-01 00:00:00", "updateTime": 1640966400000, # epoch_millis } res = es.index(index='index_test', id=1, body=doc) ``` 这段代码将插入一个具有指定ID和属性的新文档到`index_test`索引中。如果成功,`index()`方法会返回包含操作结果的响应。 总结来说,使用Python与Elasticsearch进行交互,涉及的关键点包括连接ES实例、定义索引映射以及向索引中添加数据。通过这种方式,我们可以构建一个完整的数据存储和检索系统,适用于日志分析、全文搜索等多种场景。