private void updateFunctions(Iterator<FunctionDescription.Update> iter, String exeId,
			int maxFunctions) throws ElasticException {
		StringBuilder buffer = new StringBuilder();
		do {
			FunctionDescription.Update rec = iter.next();
			RowKeyElastic eKey = (RowKeyElastic) rec.update.getExecutableRecord().getRowId();
			buffer.append("{ \"update\": { \"_index\": \"")
					.append(repository)
					.append("_executable\", ");
			buffer.append("\"_id\": \"");
			eKey.generateFunctionId(buffer, rec.update);
			buffer.append("\", \"routing\": \"").append(exeId).append("\"} }\n");
			buffer.append("{ \"doc\": { ");
			boolean needscomma = false;
			if (rec.function_name) {
				needscomma = true;
				buffer.append("\"name_func\": \"")
						.append(escape(rec.update.getFunctionName()))
						.append('\"');
			}
			if (rec.flags) {
				if (needscomma) {
					buffer.append(',');
				}
				buffer.append(" \"flags\": ").append(rec.update.getFlags());
			}
			buffer.append("} }\n");
		}
		while (iter.hasNext());
		connection.executeBulk("/_bulk", buffer.toString());
	}
Issue a bulk update request to the database, given a list of update records
for functions from a single executable.
The routine needs an iterator to the FunctionDescription.Updates and only processes up to
a given maximum number in the one bulk request.
@param iter is the iterator to the update records
@param exeId is the document id of the executable containing the functions
@param maxFunctions is the maximum number of updates to put in the one request
@throws ElasticException for communication problems with the server
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java