gpt4 book ai didi

python - 将numpy数组索引到elasticsearch中

转载 作者:行者123 更新时间:2023-12-03 00:50:35 24 4
gpt4 key购买 nike

我正在将elasticsearch 6.4与python3一起使用。我正在处理图像,输出之一是一个numpy数组。我正在尝试将numpy数组以及其他数据字段从图像分析索引到elasticsearch。我有三个 Realm :

  • 图片名称
  • 时间戳
  • 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周内使用elasticsearch ...有人可以帮忙吗?我尝试将encod字段的数据类型更改为 longnestedobjecttext等。但是没有任何帮助。

    最佳答案

    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()

    关于python - 将numpy数组索引到elasticsearch中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377727/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com