private void readMaxTimesRetrieveHeterogeneousHits(Query query) { maxTimesRetrieveHeterogeneousHits = query.properties().getInteger( maxTimesRetrieveHeterogeneousHitsName, maxTimesRetrieveHeterogeneousHits); }
/** * Look at a "reasonable" number of this by default. We don't want to set this too low because it impacts * the totalHits value returned. * <p> * If maxhits/offset is set high, use that as the default instead because it means somebody will want to be able to * get lots of hits. We could use hits+offset instead of maxhits+maxoffset but that would destroy pagination * with large values because totalHits is wrong. * <p> * If we ever get around to estimate totalhits we can rethink this. */ private long decideDefaultMaxHits(Query query) { int maxHits; int maxOffset; if (query.properties().getBoolean(PAGINATION, true)) { maxHits = query.properties().getInteger(DefaultProperties.MAX_HITS); maxOffset = query.properties().getInteger(DefaultProperties.MAX_OFFSET); } else { maxHits = query.getHits(); maxOffset = query.getOffset(); } return maxHits + maxOffset; }
/** * If the HTTP connection has been alive for too long, set the header * "Connection: Close" to tell the client to close the connection after this * request. */ private void keepAliveProcessing(Query query, Result result) { int maxLifetimeSeconds = query.properties().getInteger(KEEPALIVE_MAXLIFETIMESECONDS, -1); if (maxLifetimeSeconds < 0) { return; } else if (maxLifetimeSeconds == 0) { result.getHeaders(true).put(HTTP_CONNECTION_HEADER_NAME, HTTP_CONNECTION_CLOSE_ARGUMENT); query.trace(false, 5, simpleName, ": Max HTTP connection lifetime set to 0; adding \"", HTTP_CONNECTION_HEADER_NAME, ": ", HTTP_CONNECTION_CLOSE_ARGUMENT, "\" header"); } else { setCloseIfLifetimeExceeded(query, result, maxLifetimeSeconds); } }
protected QueryPacket createQueryPacket(String serverId, Query query) { QueryPacket queryPacket = QueryPacket.create(serverId, query); int compressionLimit = query.properties().getInteger(PACKET_COMPRESSION_LIMIT, 0); queryPacket.setCompressionLimit(compressionLimit); if (compressionLimit != 0) queryPacket.setCompressionType(query.properties().getString(PACKET_COMPRESSION_TYPE, "lz4")); return queryPacket; }
private Result validateQuery(Query query) { if (query.getHttpRequest().getProperty(DefaultProperties.MAX_HITS.toString()) != null) throw new RuntimeException(DefaultProperties.MAX_HITS + " must be specified in a query profile."); if (query.getHttpRequest().getProperty(DefaultProperties.MAX_OFFSET.toString()) != null) throw new RuntimeException(DefaultProperties.MAX_OFFSET + " must be specified in a query profile."); int maxHits = query.properties().getInteger(DefaultProperties.MAX_HITS); int maxOffset = query.properties().getInteger(DefaultProperties.MAX_OFFSET); if (query.getHits() > maxHits) { return new Result(query, ErrorMessage.createIllegalQuery(query.getHits() + " hits requested, configured limit: " + maxHits + ".")); } else if (query.getOffset() > maxOffset) { return new Result(query, ErrorMessage.createIllegalQuery("Offset of " + query.getOffset() + " requested, configured limit: " + maxOffset + ".")); } return null; }
@Override public Result search(Query query, Execution execution) { if (query.properties().getBoolean(rulesOff)) return execution.search(query); int traceLevel= query.properties().getInteger(tracelevelRules, query.getTraceLevel()-2); if (traceLevel<0) traceLevel=0; RuleBase ruleBase=resolveRuleBase(query); if (ruleBase==null) return execution.search(query); String error=ruleBase.analyze(query,traceLevel); if (error!=null) return handleError(ruleBase, query,error); else return execution.search(query); }
private int requestSummaries(Result result, String summaryClass) throws InvalidChannelException, ClassCastException, IOException { boolean summaryNeedsQuery = searcher.summaryNeedsQuery(result.getQuery()); if (result.getQuery().getTraceLevel() >= 3) result.getQuery().trace((summaryNeedsQuery ? "Resending " : "Not resending ") + "query during document summary fetching", 3); GetDocSumsPacket docsumsPacket = GetDocSumsPacket.create(result, summaryClass, summaryNeedsQuery); int compressionLimit = result.getQuery().properties().getInteger(FastSearcher.PACKET_COMPRESSION_LIMIT, 0); docsumsPacket.setCompressionLimit(compressionLimit); if (compressionLimit != 0) { docsumsPacket.setCompressionType(result.getQuery().properties().getString(FastSearcher.PACKET_COMPRESSION_TYPE, "lz4")); } boolean couldSend = channel.sendPacket(docsumsPacket); if (!couldSend) throw new IOException("Could not successfully send GetDocSumsPacket."); return docsumsPacket.getNumDocsums() + 1; }
int maxage = query.properties().getInteger(cachecontrolMaxage, -1); if (maxage > 0) { result.getHeaders(true).put(CACHE_CONTROL_HEADER, "max-age=" + maxage); int staleage = query.properties().getInteger(cachecontrolStaleage, -1); if (staleage > 0) { result.getHeaders(true).put(CACHE_CONTROL_HEADER, "stale-while-revalidate=" + staleage);
int collapseSize = query.properties().getInteger(collapsesize,defaultCollapseSize); query.properties().set(collapse, "0");
int maxHits = query.properties().getInteger(MAX_HITS); int maxOffset = query.properties().getInteger(MAX_OFFSET); if (parser.getOffset() > maxOffset) { return new Result(query, ErrorMessage.createInvalidQueryParameter("Requested offset " + parser.getOffset()