Upgrading from ES 1.7 to 5.4; default mapping analyzer

I am in the process of moving our indexes from ES 1.7 to ES 5.4, and I am encountering a problem that I am not sure how to solve.

In my old index I have this mapping on a type:

{
  "myType1": {
    "search_analyzer": "default_search_myType1",
    "index_analyzer": "default_index_myType1",
    "properties": {...}
}

When I try to create this mapping in ES 5.4, I get the error message that I cannot set analyzer and search_analyzer on the root of the type.
So how do I define which analyzer to use for this type?

Define it per field instead. You can use a template for that.

1 Like

Do you mean this?
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

I also read that if you define an analyzer named "default" and/or "default_search" in your index settings this will be the default analyzer for the index. But this does not seem to work for me...

EDIT: I figured it out :slight_smile:

The default analyzer works well for me:

DELETE mytest
PUT mytest
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "custom",
          "tokenizer": "keyword"
        }
      }
    }
  }
}

POST mytest/doc
{
  "foo": "FOO BAR"
}

GET mytest/_search
{
  "query": {
    "term": {
      "foo": {
        "value": "FOO BAR"
      }
    }
  }
}

This is producing the expected result.

EDIT: just saw that you edited your answer :slight_smile:

1 Like

I solved it by changing the name of the analyzers in the settings to "default" and "default_search" :slight_smile:

At first I thought it did not work, but when I examined the mappings closed I saw that I had defined "analyzer: standard" on the field I was trying to query... I removed that form the mappings and then everything worked as expected.

Thanks for the help!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.