private void queryByName(List<FunctionDescription> listFunctions, DescriptionManager manager,
			ExecutableRecord exeRecord, String functionName, boolean fillInSignatures,
			int maxFunctions) throws ElasticException {
		RowKeyElastic eKey = (RowKeyElastic) exeRecord.getRowId();
		String exeId = eKey.generateExeIdString();
		if (listFunctions == null) {
			listFunctions = new ArrayList<>();
		}
		if (functionName.length() == 0) {
			queryAllFunc(listFunctions, exeRecord, exeId, manager, maxFunctions);
		}
		else {
			JsonArray hitsarray = queryFuncNameMatch(exeId, functionName, maxFunctions);
			JsonObject doc = null;
			for (JsonElement element : hitsarray) {
				doc = (JsonObject) element;
				FunctionDescription funcDesc = convertDescriptionRow(doc, exeRecord, manager, null);
				listFunctions.add(funcDesc);
			}
		}
		if (fillInSignatures) {
			queryAssociatedSignatures(listFunctions, manager);
		}
	}
Query for function names within a previously queried executable
@param listFunctions - list of functions to be filled in by the query (may be null)
@param manager - container for record
@param exeRecord - previously queried ExecutableRecord
@param functionName - name to query for, if empty string, all functions in executable are returned
@param fillInSignatures - true if SignatureRecords should be filled in for resulting FunctionDescriptions
@param maxFunctions - maximum results to return
@throws ElasticException for communication problems with the server
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java