@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { rootObjectMapper.toXContent( builder, params, new ToXContent() { @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { if (indexAnalyzer != null && searchAnalyzer != null && indexAnalyzer.name().equals(searchAnalyzer.name()) && !indexAnalyzer.name().startsWith("_")) { if (!indexAnalyzer.name().equals("default")) { // same analyzers, output it once builder.field("analyzer", indexAnalyzer.name()); } } else { if (indexAnalyzer != null && !indexAnalyzer.name().startsWith("_")) { if (!indexAnalyzer.name().equals("default")) { builder.field("index_analyzer", indexAnalyzer.name()); } } if (searchAnalyzer != null && !searchAnalyzer.name().startsWith("_")) { if (!searchAnalyzer.name().equals("default")) { builder.field("search_analyzer", searchAnalyzer.name()); } } } if (meta != null && !meta.isEmpty()) { builder.field("_meta", meta()); } return builder; } // no need to pass here id and boost, since they are added to the root object mapper // in the constructor }, rootMappersNotIncludedInObject); return builder; }