/** Returns the session id of this query, or null if none is assigned */ public SessionId getSessionId() { if (requestId == null) return null; return new SessionId(requestId, getRanking().getProfile()); }
/** Returns the session id of this query, and creates and assigns it if not already present */ public SessionId getSessionId(String serverId) { if (requestId == null) requestId = UniqueRequestId.next(serverId); return new SessionId(requestId, getRanking().getProfile()); }
String rankProfile = query.getRanking().getProfile(); Set<String> invalidInDocTypes = null; Set<String> rankDocTypes = rankProfiles.get(rankProfile);
private void encodeQuery(ByteBuffer buffer) { Item.putString(query.getRanking().getProfile(), buffer); buffer.putInt(QueryPacket.getQueryFlags(query)); encodeSummaryClass(buffer); query.encodeAsProperties(buffer, sendQuery); if (sendQuery) { // The stack must be resubmitted to generate dynamic docsums int itemCountPosition = buffer.position(); buffer.putInt(0); int dumpLengthPosition = buffer.position(); buffer.putInt(0); int count = query.encode(buffer); buffer.putInt(itemCountPosition, count); buffer.putInt(dumpLengthPosition, buffer.position() - dumpLengthPosition - 4); } if (query.getRanking().getLocation() != null) { int locationLengthPosition = buffer.position(); buffer.putInt(0); int locationLength = query.getRanking().getLocation().encode(buffer); buffer.putInt(locationLengthPosition, locationLength); } }
buffer.putInt(getFlagInt()); int startOfFieldToSave = buffer.position(); Item.putString(query.getRanking().getProfile(), buffer); queryPacketData.setRankProfile(buffer, startOfFieldToSave);
.append(query.getRanking().getProfile()) .append("]");
/** * Returns whether we need to send the query when fetching summaries. * This is necessary if the query requests summary features or dynamic snippeting */ public boolean summaryNeedsQuery(Query query) { if (query.getRanking().getQueryCache()) return false; // Query is cached in backend DocumentDatabase documentDb = getDocumentDatabase(query); // Needed to generate a dynamic summary? DocsumDefinition docsumDefinition = documentDb.getDocsumDefinitionSet().getDocsum(query.getPresentation().getSummary()); if (docsumDefinition.isDynamic()) return true; // Needed to generate ranking features? RankProfile rankProfile = documentDb.rankProfiles().get(query.getRanking().getProfile()); if (rankProfile == null) return true; // stay safe if (rankProfile.hasSummaryFeatures()) return true; if (query.getRanking().getListFeatures()) return true; // (Don't just add other checks here as there is a return false above) return false; }
if (key.size() == 2) { if (key.last().equals(Ranking.LOCATION)) return ranking.getLocation(); if (key.last().equals(Ranking.PROFILE)) return ranking.getProfile(); if (key.last().equals(Ranking.SORTING)) return ranking.getSorting(); if (key.last().equals(Ranking.FRESHNESS)) return ranking.getFreshness();
/** Send a getDocsums request to a node. Responses will be added to the given receiver. */ private void sendGetDocsumsRequest(int nodeId, List<FastHit> hits, String summaryClass, CompressionType compression, Result result, GetDocsumsResponseReceiver responseReceiver) { Client.NodeConnection node = resourcePool.nodeConnections().get(nodeId); if (node == null) { String error = "Could not fill hits from unknown node " + nodeId; responseReceiver.receive(Client.GetDocsumsResponseOrError.fromError(error)); result.hits().addError(ErrorMessage.createEmptyDocsums(error)); log.warning("Got hits with partid " + nodeId + ", which is not included in the current dispatch config"); return; } Query query = result.getQuery(); String rankProfile = query.getRanking().getProfile(); byte[] serializedSlime = BinaryFormat .encode(toSlime(rankProfile, summaryClass, query.getModel().getDocumentDb(), query.getSessionId(), hits)); double timeoutSeconds = ((double) query.getTimeLeft() - 3.0) / 1000.0; Compressor.Compression compressionResult = resourcePool.compressor().compress(compression, serializedSlime); resourcePool.client().getDocsums(hits, node, compressionResult.type(), serializedSlime.length, compressionResult.data(), responseReceiver, timeoutSeconds); }
params.setLibraryParameter("rankprofile", query.getRanking().getProfile()); params.setLibraryParameter("allowslimedocsums", "true"); params.setLibraryParameter("queryflags", String.valueOf(getQueryFlags(query)));