<p dir="auto"><strong>Elasticsearch version</strong>:<br>
<code class="notranslate">version[2.3.5]</code></p>
<p dir="auto"><strong>Plugins installed</strong>:<br>
<code class="notranslate">[kopf, HQ]</code></p>
<p dir="auto"><strong>JVM version</strong>:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="$ java -version
java version &quot;1.7.0_80&quot;
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)"><pre class="notranslate"><code class="notranslate">$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
</code></pre></div>
<p dir="auto"><strong>OS version</strong>:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="$ uname -a
Linux &lt;xxx&gt; 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux"><pre class="notranslate"><code class="notranslate">$ uname -a
Linux &lt;xxx&gt; 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
</code></pre></div>
<p dir="auto"><strong>Description of the problem including expected versus actual behavior</strong>:</p>
<p dir="auto">According to the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping.html#mapping-type" rel="nofollow">reference mapping-type index page</a> and to the associated <a href="https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-fields.html" rel="nofollow">reference meta-fields index page</a> as well as the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/2.3/mapping-meta-field.html" rel="nofollow">reference _meta field page</a>, this was supposed to run successfully on a 2.3.x cluster:</p>
<p dir="auto"><strong>Steps to reproduce</strong>:</p>
<p dir="auto">DELETE /tweet<br>
PUT /tweet</p>
<p dir="auto">PUT /tweet/tweet/_mapping</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;properties&quot;: {
    &quot;tweet&quot;: {
      &quot;type&quot;: &quot;string&quot;,
      &quot;analyzer&quot;: &quot;english&quot;,
      &quot;_meta&quot;: {
        &quot;label&quot;: &quot;This is a tweet body.&quot;
      }
    },
    &quot;date&quot;: {
      &quot;type&quot;: &quot;date&quot;
    },
    &quot;name&quot;: {
      &quot;type&quot;: &quot;string&quot;
    },
    &quot;user_id&quot;: {
      &quot;type&quot;: &quot;long&quot;
    },
    &quot;_meta&quot;: {
      &quot;label&quot;: &quot;This is a tweet object.&quot;
    }
  },
  &quot;_meta&quot;: {
    &quot;label&quot;: &quot;This is a tweet database.&quot;
  }
}"><pre class="notranslate">{
  <span class="pl-ent">"properties"</span>: {
    <span class="pl-ent">"tweet"</span>: {
      <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>string<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"analyzer"</span>: <span class="pl-s"><span class="pl-pds">"</span>english<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"_meta"</span>: {
        <span class="pl-ent">"label"</span>: <span class="pl-s"><span class="pl-pds">"</span>This is a tweet body.<span class="pl-pds">"</span></span>
      }
    },
    <span class="pl-ent">"date"</span>: {
      <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>date<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"name"</span>: {
      <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>string<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"user_id"</span>: {
      <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>long<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"_meta"</span>: {
      <span class="pl-ent">"label"</span>: <span class="pl-s"><span class="pl-pds">"</span>This is a tweet object.<span class="pl-pds">"</span></span>
    }
  },
  <span class="pl-ent">"_meta"</span>: {
    <span class="pl-ent">"label"</span>: <span class="pl-s"><span class="pl-pds">"</span>This is a tweet database.<span class="pl-pds">"</span></span>
  }
}</pre></div>
<p dir="auto"><strong>Answer</strong>:</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;error&quot;: {
    &quot;root_cause&quot;: [
      {
        &quot;type&quot;: &quot;mapper_parsing_exception&quot;,
        &quot;reason&quot;: &quot;Mapping definition for [tweet] has unsupported parameters:  [_meta : {label=This is a tweet body.}]&quot;
      }
    ],
    &quot;type&quot;: &quot;mapper_parsing_exception&quot;,
    &quot;reason&quot;: &quot;Mapping definition for [tweet] has unsupported parameters:  [_meta : {label=This is a tweet body.}]&quot;
  },
  &quot;status&quot;: 400
}"><pre class="notranslate">{
  <span class="pl-ent">"error"</span>: {
    <span class="pl-ent">"root_cause"</span>: [
      {
        <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>mapper_parsing_exception<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"reason"</span>: <span class="pl-s"><span class="pl-pds">"</span>Mapping definition for [tweet] has unsupported parameters:  [_meta : {label=This is a tweet body.}]<span class="pl-pds">"</span></span>
      }
    ],
    <span class="pl-ent">"type"</span>: <span class="pl-s"><span class="pl-pds">"</span>mapper_parsing_exception<span class="pl-pds">"</span></span>,
    <span class="pl-ent">"reason"</span>: <span class="pl-s"><span class="pl-pds">"</span>Mapping definition for [tweet] has unsupported parameters:  [_meta : {label=This is a tweet body.}]<span class="pl-pds">"</span></span>
  },
  <span class="pl-ent">"status"</span>: <span class="pl-c1">400</span>
}</pre></div>
<p dir="auto">Issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="57304339" data-permission-text="Title is private" data-url="https://github.com/elastic/elasticsearch/issues/9649" data-hovercard-type="issue" data-hovercard-url="/elastic/elasticsearch/issues/9649/hovercard" href="https://github.com/elastic/elasticsearch/issues/9649">#9649</a> mentioned it, and at the end it was commented that this was implemented and available. So I'm assuming it was either removed without a doc sync or it was broken recently. However, a quick lookup at the code searching for "_meta" got me to no place where MapperRegistry was ever used to register a Mapper for "_meta" attribute. I'm looking forward to being proven wrong though.</p>
<p dir="auto">Currently, when invoking <code class="notranslate">GET indexname/_mapping</code> one gets a long list of the fields that can be expected in the index. All these have the form:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&quot;feed&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;index&quot;: &quot;not_analyzed&quot;
}"><pre class="notranslate"><code class="notranslate">"feed": {
            "type": "string",
            "index": "not_analyzed"
}
</code></pre></div>
<p dir="auto">For an end user, who normally cannot see the configuration, the name of the field and its properties might not be enough to understand what the field actually holds. Therefore, it would be very helpful to allow a comment field inside the object above. Here is an example:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&quot;feed&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;index&quot;: &quot;not_analyzed&quot;
            &quot;comment&quot;: &quot;feed holds the name of the feed as provided by the client side&quot;
}"><pre class="notranslate"><code class="notranslate">"feed": {
            "type": "string",
            "index": "not_analyzed"
            "comment": "feed holds the name of the feed as provided by the client side"
}
</code></pre></div>