@Override
public FacetExecutor parse(String facetName, XContentParser parser,
SearchContext searchContext) throws IOException {
Map<String, Object> payload = parser.mapOrderedAndClose();
if (!payload.containsKey("doc")) {
throw new SQLParseException("update doc missing");
}
Map<String, Object> doc;
Optional<Long> version;
try {
doc = (Map<String, Object>)payload.get("doc");
Number versionNumber = (Number)payload.get("version");
if (versionNumber == null) {
version = Optional.absent();
} else {
version = Optional.of(versionNumber.longValue());
}
} catch (ClassCastException e) {
throw new SQLParseException("invalid update doc");
}
return new UpdateFacetExecutor(doc, version, searchContext, updateAction);
}