Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

elasticsearch: create index with mappings using javascript

I'm trying to create an elasticsearch index with mappings using the official javascript client.

My code is as follows:

client.indices.create({
    index: "aName",
    "mappings": {
        "aType": {
            "properties": {
                "aProp1": { "type": "string", "index": "not_analyzed" },
                "aProp2": { "type": "string", "index": "not_analyzed" },
                "aProp3": { "type": "string", "index": "not_analyzed" },
                "aProp4": { "type": "string", "index": "not_analyzed" }
            }
        }
    }
}, function(err,resp,respcode){
    console.log(err,resp,respcode);
});

However... the index is created but without the mappings.... The output is:

undefined { ok: true, acknowledged: true } 200

What am I doing wrong?

like image 817
Sander Spilleman Avatar asked Mar 11 '14 12:03

Sander Spilleman


People also ask

How do you show mappings in Elasticsearch index?

To do this you will need your Elasticsearch endpoint address and your ApiKey. These can be accessed from your dashboard by choosing Stack Settings > Elasticsearch . The next step is to write a a curl -x get command to retrieve the mappings from Elasticsearch.

Can Elasticsearch index have multiple mappings?

So it is recommended to save one mapping type into one index. From Elasticsearch version 6.0 by default index doesn't allow multiple types per index. The better option is to always have one document type per index. The single responsibility of the index is to maintain the single document type/mapping type per index.


3 Answers

Refining the answer that is in the comment above from Sander Spilleman. The "mappings" property needs to be inside the "body" property. I am also using the Javascript client 1.3.0 and the docs are still not updated with an example.

Adding an example that worked for me with the javascript API provided by elasticsearch on NPM 1.3.0

var body = {     tweet:{         properties:{             tag         : {"type" : "string", "index" : "not_analyzed"},             type        : {"type" : "string", "index" : "not_analyzed"},             namespace   : {"type" : "string", "index" : "not_analyzed"},             tid         : {"type" : "string", "index" : "not_analyzed"}         }     } }  client.indices.putMapping({index:"tweets", type:"tweet", body:body}); 
like image 151
Tim Avatar answered Oct 06 '22 01:10

Tim


I tried same but got error from the name of index. aName is not valid, error was about the using lowercase index name. Then It created with mappings.

it.only('putMapping', function (done) {     client.indices.create({         index: "aname",         body: {             "mappings": {                 "aType": {                     "properties": {                         "aProp1": {"type": "string", "index": "not_analyzed"},                         "aProp2": {"type": "string", "index": "not_analyzed"},                         "aProp3": {"type": "string", "index": "not_analyzed"},                         "aProp4": {"type": "string", "index": "not_analyzed"}                     }                 }             }         }     }, function (err, resp, respcode) {         console.log(err, resp, respcode);     }); }) 

Output:

Elasticsearch DEBUG: 2015-08-08T15:23:09Z   starting request { method: 'POST',     path: '/aname',     body: { mappings: { aType: [Object] } },     query: {} }   Elasticsearch TRACE: 2015-08-08T15:23:10Z   -> POST http://localhost:9200/aname   {     "mappings": {       "aType": {         "properties": {           "aProp1": {             "type": "string",             "index": "not_analyzed"           },           "aProp2": {             "type": "string",             "index": "not_analyzed"           },           "aProp3": {             "type": "string",             "index": "not_analyzed"           },           "aProp4": {             "type": "string",             "index": "not_analyzed"           }         }       }     }   }   <- 200   {     "acknowledged": true   } 

enter image description here

like image 44
uzay95 Avatar answered Oct 06 '22 01:10

uzay95


Just add body around mappings:

client.indices.create({
    index: "aName",
    body: {
        "mappings": {
            "aType": {
                "properties": {
                    "aProp1": { "type": "string", "index": "not_analyzed" },
                    "aProp2": { "type": "string", "index": "not_analyzed" },
                    "aProp3": { "type": "string", "index": "not_analyzed" },
                    "aProp4": { "type": "string", "index": "not_analyzed" }
                }
            }
        }
    }
}, function (err, resp, respcode) {
    console.log(err, resp, respcode);
});
like image 33
Madhusudan N Avatar answered Oct 05 '22 23:10

Madhusudan N