In contrast to earlier versions, Elasticsearch has deprecated the string
type
in version 5. This affects the index
setting on a field as well.
The string
type was used for different things, namely analyzed content to
be searched as fulltext, as well as in a non-analyzed way for keyword searches.
Thus string
has been split into the new types text
and keyword
. Here is a
"conversion table":
2.x | 5.x |
---|---|
"type": "string", "index": "no" | "type": "text", "index": false |
"type": "string", "index": "analyzed" | "type": "text", "index": true |
"type": "string", "index": "not_analyzed" | "type": "keyword", "index": true |
If no index configuration is set, the default "type": "keyword", "index": true
is used.
So if you upgrade from previous elasticsearch version, check your node type configurations
if they are configured as expected.
Something that has been enforced since version 2 of Elasticsearch is the fact that fields of the same name must have the same type within an index, across types. See https://www.elastic.co/blog/great-mapping-refactoring#conflicting-mappings.
With the split of string
into two types, new conflicts of that type may arise.
To fix those conflicts, you may need to rename properties or adjust the mapping in your node types.