0

I am trying to create an index with a custom default analyzer. I already checked the following questions:

but they didn't solve the issue.

Here is my schema:

put /emails
{
   "mappings": {
      "email": {
         "analyzer": "lkw",
         "properties": {
            "createdOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "data": {
               "type": "object",
               "dynamic": "true"
            },
            "from": {
               "type": "string",
               "store": true
            },
            "id": {
               "type": "string",
               "store": true
            },
            "sentOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "sesId": {
               "type": "string",
               "store": true
            },
            "subject": {
               "type": "string",
               "store": true,
               "analyzer": "standard"
            },
            "templates": {
               "properties": {
                  "html": {
                     "type": "string",
                     "store": true
                  },
                  "plainText": {
                     "type": "string",
                     "store": true
                  }
               }
            },
            "to": {
               "type": "string",
               "store": true
            },
            "type": {
               "type": "string",
               "store": true
            }
         }
      },
      "event": {
         "_parent": {
            "type": "email"
         },
         "analyzer": "lkw",
         "properties": {
            "id": {
               "type": "string",
               "store": true
            },
            "origin": {
               "type": "string",
               "store": true
            },
            "time": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "type": {
               "type": "string",
               "store": true
            },
            "userAgent": {
               "type": "string",
               "store": true
            }
         }
      }
   },
   "settings": {
      "analysis": {
         "analyzer": {
            "lkw": {
               "tokenizer": "keyword",
               "filter": [
                  "lowercase"
               ],
               "type": "custom"
            }
         }
      }
   }
}

When I execute the command above, I get this error:

{
       "error": {
          "root_cause": [
             {
                "type": "mapper_parsing_exception",
                "reason": "Root mapping definition has unsupported parameters:  [analyzer : lkw]"
             }
          ],
          "type": "mapper_parsing_exception",
          "reason": "Failed to parse mapping [event]: Root mapping definition has unsupported parameters:  [analyzer : lkw]",
          "caused_by": {
             "type": "mapper_parsing_exception",
             "reason": "Root mapping definition has unsupported parameters:  [analyzer : lkw]"
          }
       },
       "status": 400
    }
Community
  • 1
  • 1
Kralizek
  • 1,999
  • 1
  • 28
  • 47

1 Answers1

0

Since you have only a few string fields, I suggest you simply specify your lkw analyzer where you need it, just like you did for the standard one:

PUT /emails
{
   "mappings": {
      "email": {
         "properties": {
            "createdOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "data": {
               "type": "object",
               "dynamic": "true"
            },
            "from": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "id": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "sentOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "sesId": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "subject": {
               "type": "string",
               "store": true,
               "analyzer": "standard"
            },
            "templates": {
               "properties": {
                  "html": {
                     "type": "string",
                     "store": true,
                     "analyzer": "lkw"
                  },
                  "plainText": {
                     "type": "string",
                     "store": true,
                     "analyzer": "lkw"
                  }
               }
            },
            "to": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "type": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            }
         }
      },
      "event": {
         "_parent": {
            "type": "email"
         },
         "properties": {
            "id": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "origin": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "time": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "type": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "userAgent": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            }
         }
      }
   },
   "settings": {
      "analysis": {
         "analyzer": {
            "lkw": {
               "tokenizer": "keyword",
               "filter": [
                  "lowercase"
               ],
               "type": "custom"
            }
         }
      }
   }
}
Val
  • 207,596
  • 13
  • 358
  • 360
  • I'll take this as the correct answer. Do you know why the other way is not working? – Kralizek Dec 12 '16 at 10:13
  • Because that was not a correct way of specifying an analyzer to be used for a field. – Val Dec 12 '16 at 10:17
  • Trying to understand what I did wrong because I set the default analyzer on other indexes. – Kralizek Dec 12 '16 at 10:26
  • You simply need to call it `default` in your index settings for it to work. – Val Dec 12 '16 at 10:29
  • I found out it was a breaking change 1.x => 2.x https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking_20_mapping_changes.html#_analyzer_mappings Thanks for your help! – Kralizek Dec 12 '16 at 10:41