Эластичный поиск и AWS python - PullRequest
0 голосов
/ 09 ноября 2018

Я работаю над AWS ElasticSearch, используя python, у меня есть файл JSON с 3 полями.

("cat1","Cat2","cat3"), each row is separated with \n 
example  cat1:food, cat2: wine, cat3: lunch etc.

from requests_aws4auth import AWS4Auth
import boto3
import requests
    payload = {

  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 5
  },
  "mappings": { 
      "Categoryall" :{
        "properties" : {
          "cat1" : {
            "type": "string"
        },
          "Cat2":{
            "type" : "string"
        },
          "cat3" : {
            "type" : "string"
        }

      }    
    }
  } 
}

r = requests.put(url, auth=awsauth, json=payload)

Я создал схему / отображение для индекса, как показано выше, но я не знаю, как заполнить индекс. Я думаю поставить цикл for для файла JSON и вызвать запрос post, чтобы вставить индекс. Не имеет понятия, как действовать.

Я хочу создать индекс и массово загрузить этот файл в индекс. Любое предложение будет оценено.

1 Ответ

0 голосов
/ 09 ноября 2018

Взгляните на Elasticsearch Bulk API .

По сути, вам нужно создать тело массового запроса и отправить его на ваш URL-адрес "https://{elastic -endpoint} / _ массовый".

В следующем примере показан массовый запрос на вставку 3 записей json в ваш индекс с именем «my_index»:

{ "index" : { "_index" : "my_index", "_type" : "_doc", "_id" : "1" } }
{ "cat1" : "food 1", "cat2": "wine 1", "cat3": "lunch 1" }
{ "index" : { "_index" : "my_index", "_type" : "_doc", "_id" : "2" } }
{ "cat1" : "food 2", "cat2": "wine 2", "cat3": "lunch 2" }
{ "index" : { "_index" : "my_index", "_type" : "_doc", "_id" : "3" } }
{ "cat1" : "food 3", "cat2": "wine 3", "cat3": "lunch 3" }

, где каждая запись json представлена ​​2 объектами json.

Так что, если вы запишите тело вашего массового запроса в файл с именем post-data.txt , вы можете опубликовать его с помощью Python примерно так:

with open('post-data.txt','rb') as payload:
    r = requests.post('https://your-elastic-endpoint/_bulk', auth=awsauth,
                      data=payload, ... add more params)

В качестве альтернативы, вы можете попробовать Pythonasticsearch оптовые помощники .

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