我将从Open Weather Map API中检索一些数据,然后使用Python将它们插入Elasticsearch索引中。然后,我将使用一些新的,并检查它们是否已在索引中。如果不是,我将它们添加到索引中。如果已经在其中,则应将其忽略。
import datetime
from pprint import pprint
import requests
import urllib
import json
import request
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import time
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
r = requests.get('http://api.openweathermap.org/data/2.5/weather?q=London&appid=###').json()
pprint(r)
res = es.search(index="weathermap", body={"query": {"match_all": {}}})
for m in res:
if m not in res:
es.index(index='weathermap', doc_type='doc')
答案 0 :(得分:0)
您可以让Elastic为您完成所有操作,而不是检查它是否存在并添加它(如果不存在)。您可以按照文档but this uses more resources in the long run, can cause unexpected behavior and should be avoided中的说明调用es.index(...)
来代替使用es.create(...)
。
在特定索引中添加类型化的JSON文档,使其可搜索。 该方法在后台调用index(…,op_type ='create')
来自create:
索引操作还接受
op_type
,可用于强制执行create
操作,允许“如果不存在”行为。当create
如果使用该ID的文档,则使用索引操作将失败 索引中已经存在。
因此,如果未插入它将抛出错误,因此请务必进行处理。
答案 1 :(得分:0)
您可以使用以下代码
import datetime
from pprint import pprint
import requests
import urllib
import json
import request
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import time
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
r = requests.get('http://api.openweathermap.org/data/2.5/weather?q=London&appid=###').json()
pprint(r)
res = es.search(index="weathermap", body={"query": {"match_all": {}}})
for m in res['hits']['hits']:
if search_value not in res:
es.index(index='weathermap', doc_type='doc',whole_doc_body)