public ResponseNearestVector overviewSimilarFunctions(SFOverviewInfo overviewInfo,
			SFResultsUpdateListener<ResponseNearestVector> listener, TaskMonitor monitor)
			throws QueryDatabaseException, CancelledException {
		ResponseNearestVector response = null;
		try {
			if (database == null || database.getStatus() != Status.Ready) {
				throw new QueryDatabaseException("Connection to database not established");
			}
			if (monitor == null) {
				monitor = TaskMonitor.DUMMY;
			}
			if (listener == null) {
				listener = new NullListener<>();
			}

			QueryNearestVector query = generateQueryNearestVector(overviewInfo, monitor);
			int localNumStages = numStages;
			if (localNumStages == 0) {
				int funcsPerStage = database.getOverviewFunctionsPerStage();
				localNumStages = overviewInfo.getNumberOfStages(funcsPerStage);
			}
			StagingManager stagingManager =
				createStagingManager(overviewInfo.getFunctions().size(), localNumStages);

			try {
				response =
					(ResponseNearestVector) doQuery(query, stagingManager, listener, monitor);
			}
			catch (LSHException e) {
				throw new QueryDatabaseException(e.getMessage());
			}
		}
		finally {
			listener.setFinalResult(response);
		}
		return response;
	}
Query the given server for similar function overview information
@param overviewInfo is details of the overview query
@param listener is the listener to be informed of the query status and incremental results 
		coming back, may be null
@param monitor the task monitor
@return the ResponseNearestVector
@throws QueryDatabaseException if the database connection cannot be established
@throws CancelledException if the query is cancelled by the user
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/facade/SimilarFunctionQueryService.java