private void fdbDelete(QueryDelete query) throws ElasticException, LSHException {
		final ResponseDelete response = query.respdelete;
		for (ExeSpecifier spec : query.exelist) {
			DescriptionManager manager = new DescriptionManager();
			ExecutableRecord erec = null;
			if (spec.exemd5.length() != 0) {
				JsonObject row = queryMd5ExeMatch(spec.exemd5);
				if (row != null) {
					erec = makeExecutableRecord(manager, row);
				}
			}
			else {
				erec = querySingleExecutable(manager, spec.exename, spec.arch, spec.execompname);
			}
			if (erec == null) {
				response.missedlist.add(spec);
				continue;
			}
			ResponseDelete.DeleteResult delrec = new ResponseDelete.DeleteResult();
			delrec.md5 = erec.getMd5();
			delrec.name = erec.getNameExec();
			List<FunctionDescription> funclist = new ArrayList<>();
			RowKeyElastic eKey = updateKey(manager, erec);
			String exeId = eKey.generateExeIdString();
			queryAllFunc(funclist, erec, exeId, manager, 0);
			Set<IdHistogram> table = IdHistogram.buildVectorIdHistogram(funclist.iterator());
			List<IdHistogram> deleteList = new ArrayList<>();
			Iterator<IdHistogram> iter1 = table.iterator();
			Iterator<IdHistogram> iter2 = table.iterator();
			while (iter1.hasNext()) {
				decrementVectorCounters(deleteList, iter1, iter2, MAX_VECTORDELETE_WINDOW);
			}
			iter1 = deleteList.iterator();
			while (iter1.hasNext()) {
				deleteRawVectors(iter1, MAX_VECTORDELETE_WINDOW);
			}

			delrec.funccount = deleteExeDocuments(exeId);
			response.reslist.add(delrec);
		}
	}
Entry point for the Elasticsearch version of QueryDelete command:
  Delete specific executables from the database
@param query is command parameters
@throws ElasticException for communication problems with the server
@throws LSHException for problems building records
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java