0

I am using elasticsearch version 6.3.1. And I am creating a nested type field,I have created this field to append all the documents of same ID.

Here is my schema for index:-

curl -XPUT 'localhost:9200/axes_index_test12?pretty' -H 'Content-Type: application/json' -d'
{
"mappings": {
     "axes_type_test12": {
        "properties": {
           "totalData": {
              "type": "nested",
              "properties": {
                 "gpsdt": {
                    "type": "date",
        "format":"dateOptionalTime"
                 },
         "extbatlevel": {
                    "type": "integer"
                 },
         "intbatlevel" : {
        "type" : "integer"
         },
         "lastgpsdt": {
                    "type": "date",
        "format":"dateOptionalTime"
                 },
             "satno" : {
        "type" : "integer"
         },
         "srtangle" : {
        "type" : "integer"
         }
              }
           },
           "imei": {
              "type": "long"
           },
           "date": {
              "type": "date", "format":"dateOptionalTime"
           },
       "id" : {
       "type" : "long"
    }
        }
     }
  }
}'

And to append into existing array I call following API : -

Here is the documents which I have to append:-

data={
                    "script" : {"source": "ctx._source.totalData.add(params.count)",
                    "lang": "painless",
                    "params" : {"count" : { "gpsdt" : gpsdt,
                                                    "analog1" : analog1,
                                                    "analog2" : analog2,
                                                    "analog3" : analog3,
                                                    "analog4" : analog4,
                                                    "digital1" : digital1,
                                                    "digital2" : digital2,
                                                    "digital3" : digital3,
                                                    "digital4" : digital4,
                                                    "extbatlevel" : extbatlevel,
                                                    "intbatlevel" : intbatlevel,
                                                    "lastgpsdt" : lastgpsdt,
                                                    "latitude" : latitude,
                                                    "longitude" : longitude,
                                                    "odo" : odo,
                                                    "odometer" : odometer,
                                                    "satno" : satno,
                                                    "srtangle" : srtangle,
                                                    "speed" : speed
                                               }
                               }
                                    }
            }

Document Parsing:-

json_data = json.dumps(data)

And API url is: -

API_ENDPOINT = "http://localhost:9200/axes_index_test12/axes_type_test12/"+str(documentId)+"/_update"

And Finnaly I call this API:-

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url = API_ENDPOINT, data = json_data,headers=headers

Everything is fine with this but I am not getting good performance when I append new documents in existing array.

So please suggest me what changes I should make? And I have 4 node cluster, 1 master, 2 data nodes and one cordinator node.

Raj
  • 429
  • 2
  • 6
  • 26
  • In this case it is inserting around 50-100 documents per second. – Raj Jul 10 '18 at 09:52
  • You may want to consider using Bulk API & related performance tweaks, like is told in [this answer](https://stackoverflow.com/questions/46813530/update-nested-field-for-millions-of-documents/46861323#46861323). – Nikolay Vasiliev Jul 10 '18 at 20:26

0 Answers0