Как проверить, есть ли данные из API в индексе эластичного поиска, используя python, и, если это не так, вставить его - PullRequest
0 голосов
/ 26 сентября 2018

Я хотел бы получить некоторые данные из API Open Weather Map и вставить их в индекс 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')

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать следующий код

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)
0 голосов
/ 26 сентября 2018

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

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

Из Эластичной документации :

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...