/** * Parse the document id into a candidate result */ public static CandidateResult parseIndexDocId( final String documentId, final double distance ) { final Matcher matcher = DOCUMENT_PATTERN.matcher(documentId); Preconditions.checkArgument(matcher.matches(), "Pattern for document id did not match expected format"); Preconditions.checkArgument(matcher.groupCount() == 9, "9 groups expected in the pattern"); //Other fields can be parsed using groups. The groups start at value 1, group 0 is the entire match final String entityUUID = matcher.group(3); final String entityType = matcher.group(4); final String versionUUID = matcher.group(5); Id entityId = new SimpleId(UUID.fromString(entityUUID), entityType); return distance >= 0 ? new GeoCandidateResult(entityId, UUID.fromString(versionUUID), documentId, distance) : new CandidateResult(entityId, UUID.fromString(versionUUID), documentId); }
/** * Build CandidateResults from direct query */ private CandidateResults buildCandidateResultsForDirectQuery(final List<Identifier> directIdentifiers, final ParsedQuery query, final SearchTypes searchTypes) { Preconditions.checkArgument(searchTypes.getTypes().length > 0, "Search type required"); String entityType = searchTypes.getTypes()[0]; List<CandidateResult> candidates = new ArrayList<>(directIdentifiers.size()); for (Identifier id : directIdentifiers) { CandidateResult candidateResult = null; if (id.isUUID()) { candidateResult = new CandidateResult(entityType, id.getUUID()); } else if (id.isName()) { candidateResult = new CandidateResult(entityType, id.getName()); } candidates.add(candidateResult); } return new CandidateResults(candidates, query.getSelectFieldMappings(), true); }