Я хотел бы получить некоторые данные из Open Map Map API и вставить их в индекс Elasticsearch с Python. Затем я возьму несколько новых и проверю, уже ли они в индексе. Если это не так, я бы добавил их в индекс. Если они уже есть, их следует игнорировать.
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')
Вместо того, чтобы проверять, существует ли он и добавлять его, если это не так, вы можете позволить Elastic сделать все это для вас. Вместо использования es.index(...)
вы можете вызвать es.create(...)
как указано в документации для создания.
Добавляет напечатанный документ JSON в определенный индекс, что делает его доступным для поиска. За кулисами этот метод вызывает index (..., op_type = create)
Операция индекса также принимает
op_type
который может использоваться для принудительной операцииcreate
, позволяя поведение "put-if-absent". Когда используетсяcreate
, операция индекса завершится неудачно, если документ по этому идентификатору уже существует в индексе.
Поэтому он будет вызывать ошибку, если она не вставлена, поэтому не забудьте ее обработать.
вы можете использовать следующий код
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)