Индексирование массива NumPy в ElasticSearch - PullRequest
0 голосов
/ 26 января 2019

Я использую elasticsearch 6.4 вместе с python3. Я обрабатываю изображения, и один из выходных данных является массивом NumPy. Я пытаюсь индексировать массив NumPy вместе с другими полями данных из анализа изображений в эластичный поиск. У меня есть три поля:

  1. ImageName
  2. 1007 * Отметка времени *
  3. массив numpy.

Они выглядят следующим образом:

imagename: 123def321_1548492175.jpg 
time_stamp: 1548492175 [
encod:
array([ -1.42405510e-01,   8.58794246e-03,   4.45950478e-02,
        -1.81895699e-02,  -5.53448014e-02,  -1.73689388e-02,
        -4.21237871e-02,  -8.25227201e-02,   1.56264022e-01,
        -3.99713218e-02,   1.60366639e-01,   4.53100577e-02,
        -2.09424138e-01,  -5.07910103e-02,  -4.65360470e-04,
         8.38596523e-02,  -1.19933985e-01,  -1.71518624e-01,
        -1.26374453e-01  ])]

Фактическая длина массива намного больше. Когда я получаю свой индекс, он определяется следующим образом:

{
  "g6jy834005er" : {
    "aliases" : { },
    "mappings" : {
      "images" : {
        "dynamic" : "false",
        "properties" : {
          "encod" : {
            "type" : "nested"
          },
          "imagename" : {
            "type" : "text"
          },
          "time_stamp" : {
            "type" : "integer"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1548499595840",
        "number_of_shards" : "1",
        "number_of_replicas" : "0",
        "uuid" : "OP-qab-XRfGQ_oZZEvTClw",
        "version" : {
          "created" : "6050499"
        },
        "provided_name" : "g6jy834005er"
      }
    }
  }
}

В моем коде Python я использую следующее для индексации значений:

doc = {'imagename': name, 'time_stamp': tm,'encod':fenc}
es.index(index=indx, doc_type="images", body=doc)

Я получаю следующую ошибку:

elasticsearch.exceptions.SerializationError: ({'imagename': '123def321_1548492174.jpg', 'time_stamp': '1548492174', 'encod': [array([-0.16764426,  0.01966568,  0.04131121, -0.01985365, -0.07606418,....

TypeError("Unable to serialize array([-0.16764426,  0.01966568,  0.04131121, -0.01985365,.....(type: <class 'numpy.ndarray'>)",))

За последние 2 недели я пользуюсьasticsearch только ... может кто-нибудь помочь? Я попытался изменить тип данных поля кодирования на long, nested, object, text и т. Д. Но ничего не помогло.

1 Ответ

0 голосов
/ 26 января 2019

Elasticsearch предоставляет JSON API, поэтому pyelasticsearch поддерживает типы данных, которые допустимы в объекте JSON.Ясно, что numpy.ndarray не один из них.

Если вам нужно было вставить массив NumPy, это возможное решение:

encod_np_array = np.array([ -1.42405510e-01,   8.58794246e-03,   4.45950478e-02,
        -1.81895699e-02,  -5.53448014e-02,  -1.73689388e-02,
        -1.26374453e-01  ])
encod_list = encod_np_array.tolist()
doc = {'imagename': name, 'time_stamp': tm,'encod':encod_list}

И затем вызовите es.index()

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