Как проверить, есть ли данные из API в индексе эластичного поиска, используя python, и, если это не так, вставить его

1

Я хотел бы получить некоторые данные из 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')
  • 0
    Чао Эдди, как вы определяете, есть ли документ в индексе? Какие поля уникальны, только комбинация метки времени и города?
Теги:
elasticsearch
openweathermap

2 ответа

0

Вместо того, чтобы проверять, существует ли он и добавлять его, если это не так, вы можете позволить Elastic сделать все это для вас. Вместо использования es.index(...) вы можете вызвать es.create(...) как указано в документации для создания.

Добавляет напечатанный документ JSON в определенный индекс, что делает его доступным для поиска. За кулисами этот метод вызывает index (..., op_type = create)

Из документации Elastic:

Операция индекса также принимает op_type который может использоваться для принудительной операции create, позволяя поведение "put-if-absent". Когда используется create, операция индекса завершится неудачно, если документ по этому идентификатору уже существует в индексе.

Поэтому он будет вызывать ошибку, если она не вставлена, поэтому не забудьте ее обработать.

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню