Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elasticsearch always returning "mapping type is missing"

I'm following the advice given here in order to find partial words with elasticsearch:

ElasticSearch n-gram tokenfilter not finding partial words

I've created a simple bash script that attempts to run a version of this:

curl -XDELETE 10.160.86.134:9200/products curl -XPOST 10.160.86.134:9200/products -d '{   "index": {     "number_of_shards": 1,     "analysis": {        "filter": {          "mynGram" : {"type": "nGram", "min_gram": 2, "max_gram": 10}        },        "analyzer": {          "a1" : {            "type":"custom",            "tokenizer": "standard",            "filter": ["lowercase", "mynGram"]          }        }      }     }   } }'  curl -XPUT 10.160.86.134:9200/products/_mapping -d '{   "product" : {     "index_analyzer" : "a1",     "search_analyzer" : "standard",     "properties" : {       "product_description": {"type":"string"},       "product_name": {"type":"string"}     }   } }' 

Following running this script the first two commands (dumping products, then setting the index) seem to work giving me this:

{"ok":true,"acknowledged":true} {"ok":true,"acknowledged":true} 

Then it errors out following the mapping call giving me this:

{"error":"ActionRequestValidationException[Validation Failed: 1: mapping type is missing;]","status":500} 

Can anyone see what I'm doing wrong? Searching google starts autocompleting "mapping not found elasticsearch" so it seems to be a very common error.

like image 568
Travis Avatar asked Nov 16 '11 23:11

Travis


2 Answers

Turns out this is happening because the mapping needs to be applied to the type:

I tried applying it to the wrong thing:

curl -XPUT 10.160.86.134:9200/products/_mapping -d '{ 

It needs to be applied to the type like so:

curl -XPUT 10.160.86.134:9200/products/product/_mapping -d '{ 

It's sad that a simple google search couldn't answer this. Also the previous post I linked to is very misleading and the answer is wrong, which I'll point out there as well.

like image 55
Travis Avatar answered Oct 05 '22 01:10

Travis


Set mapping for the index is possible in Elastic search. I tried this with the latest version of Elastic search 1.7.3 and I was able to set the mapping successfully to the index.

I tried the following,

  • Delete the index (DELETE http://localhost:9200/index)
  • Put the mapping json under the index (PUT http://localhost:9200/index)
  • Get the mapping (GET http://localhost:9200//_mapping)
like image 28
Thamizharasu Avatar answered Oct 05 '22 00:10

Thamizharasu