private void fillinChildren(FunctionDescription funcRecord, DescriptionManager manager,
			Map<RowKey, FunctionDescription> functionMap) throws ElasticException, LSHException {
		if (!info.trackcallgraph) {
			throw new ElasticException(
				"Elasticsearch database does not have callgraph information enabled");
		}
		JsonArray callids = queryCallgraphRows(funcRecord);
		if (callids == null) {
			return;		// field is not present, meaning children are not present
		}
		for (JsonElement callid : callids) {
			String funcId = callid.getAsString();
			RowKeyElastic eKey = RowKeyElastic.parseFunctionId(funcId);
			FunctionDescription fdesc = functionMap.get(eKey);
			if (fdesc == null) {
				fdesc = querySingleDescriptionId(manager, funcId);
				functionMap.put(eKey, fdesc);
			}
			manager.makeCallgraphLink(funcRecord, fdesc, 0);
		}
	}
Given a specific function, query for all of its child functions.
Uses a RowKey->FunctionDescription map to cache functions and avoid
querying for the same function multiple times
@param funcRecord is the specified function
@param manager is the container for new child FunctionDescriptions
@param functionMap is the cache
@throws ElasticException for communication problems with the server
@throws LSHException for problems adding records to the container
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java