如何使用Python将Elasticsearch的数据索引到MongoDB

2023-04-15 00:00:00 索引 数据 如何使用

要使用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" : "皮蛋编程" }

相关文章