如何使用Python将Elasticsearch的数据索引到MongoDB
要使用Python将Elasticsearch的数据索引到MongoDB,可以使用elasticsearch_dsl和pymongo这两个库。
首先安装这两个库:
pip install elasticsearch-dsl pymongo
然后创建一个连接elasticsearch的对象和一个连接MongoDB的对象:
from elasticsearch import Elasticsearch from pymongo import MongoClient es = Elasticsearch('http://localhost:9200') client = MongoClient('mongodb://localhost:27017/')
接着我们需要定义Elasticsearch中的索引和MongoDB中的集合,以及需要从Elasticsearch中检索的字段:
index = 'my_index' doc_type = 'my_type' collection = client['my_db']['my_collection'] fields = ['title', 'content']
然后我们需要使用elasticsearch_dsl从Elasticsearch中查询数据,遍历查询结果并将每个文档插入到MongoDB中:
from elasticsearch_dsl import Search s = Search(using=es, index=index, doc_type=doc_type) for hit in s.scan(): doc = {} for field in fields: doc[field] = hit.get(field, '') doc['_id'] = hit.meta.id collection.insert_one(doc)
以上代码中,首先使用elasticsearch_dsl创建一个查询对象s,并指定要查询的index和doc_type。然后使用s.scan遍历查询结果,对于每个文档,我们将需要的字段存储到一个Python字典doc中,同时将文档的id作为MongoDB中的_id,最后使用collection.insert_one将doc插入到MongoDB中。
完整代码如下:
from elasticsearch import Elasticsearch from elasticsearch_dsl import Search from pymongo import MongoClient es = Elasticsearch('http://localhost:9200') client = MongoClient('mongodb://localhost:27017/') index = 'my_index' doc_type = 'my_type' collection = client['my_db']['my_collection'] fields = ['title', 'content'] s = Search(using=es, index=index, doc_type=doc_type) for hit in s.scan(): doc = {} for field in fields: doc[field] = hit.get(field, '') doc['_id'] = hit.meta.id collection.insert_one(doc)
当数据插入完成后,可以使用MongoDB的shell或者其他工具查看插入的数据,例如:
> use my_db > db.my_collection.find() { "_id" : "1", "title" : "pidancode.com", "content" : "皮蛋编程" }
相关文章