protected DocumentDatabase getDocumentDatabase(Query query) { if (query.getModel().getRestrict().size() == 1) { String docTypeName = (String)query.getModel().getRestrict().toArray()[0]; DocumentDatabase db = documentDbs.get(docTypeName); if (db != null) { return db; } } return defaultDocumentDb; }
void retrieveRemainingHitsForGroup(DocumentGroup documentGroup) { Set<String> oldRestrictList = query.getModel().getRestrict(); try { int numMissingHits = documentGroup.targetNumberOfDocuments - numHits(documentGroup); int offset = numHits(documentGroup); query.getModel().getRestrict().clear(); query.getModel().getRestrict().add(documentGroup.documentName); query.setWindow(offset, numMissingHits); partitionedResult.addHits(retrieveHits()); } finally { restoreWindow(); query.getModel().getRestrict().clear(); query.getModel().getRestrict().addAll(oldRestrictList); } }
Set<String> resolveDocumentTypes(Query query, IndexFacts indexFacts) { Set<String> restrict = query.getModel().getRestrict(); if (restrict == null || restrict.isEmpty()) { Set<String> sources = query.getModel().getSources(); return (sources == null || sources.isEmpty()) ? documentTypes : new HashSet<>(indexFacts.newSession(sources, Collections.emptyList(), documentTypes).documentTypes()); } else { return filterValidDocumentTypes(restrict); } }
/** Calls resolveDocumentTypes(query.getModel().getSources(), query.getModel().getRestrict()) */ private Set<String> resolveDocumentTypes(Query query) { // Assumption: Search definition name equals document name. return resolveDocumentTypes(query.getModel().getSources(), query.getModel().getRestrict(), searchDefinitions.keySet()); }
/** * Optimizes the given query tree based on its {@link Model#getRestrict()} parameter, if any. */ public static void optimizeByRestrict(Query query) { if (query.getModel().getRestrict().size() != 1) { return; } Item root = query.getModel().getQueryTree().getRoot(); if (optimizeByRestrict(root, query.getModel().getRestrict().iterator().next()) == Recall.RECALLS_NOTHING) { query.getModel().getQueryTree().setRoot(new NullItem()); } }
Set<String> restrict = query.getModel().getRestrict(); Set<String> sources = query.getModel().getSources(); boolean validate = restrict != null && !restrict.isEmpty();
if (query.getModel().getRestrict() != null) { s.append(" restrict=").append(query.getModel().getRestrict().toString());
@Override public void fill(Result result, String summaryClass, Execution execution) { execution.fill(result, summaryClass); Set<String> summaryFields = result.getQuery().getPresentation().getSummaryFields(); if (summaryFields.isEmpty() || summaryClass == null || result.getQuery().properties().getBoolean(FIELD_FILLER_DISABLE)) { return; } if (intersectionOfAttributes.containsAll(summaryFields)) { if ( ! Execution.ATTRIBUTEPREFETCH.equals(summaryClass)) { execution.fill(result, Execution.ATTRIBUTEPREFETCH); } } else { // Yes, summaryClass may be Execution.ATTRIBUTEPREFETCH here if ( ! summaryDb.hasAll(summaryFields, summaryClass, result.getQuery().getModel().getRestrict())) { execution.fill(result, null); } } }
@Override public Result search(Query query, Execution execution) { Result mergedResults = execution.search(query); Results<SearchChainInvocationSpec, UnresolvedSearchChainException> targets = getTargets(query.getModel().getSources(), query.properties(), execution.context().getIndexFacts()); warnIfUnresolvedSearchChains(targets.errors(), mergedResults.hits()); Collection<SearchChainInvocationSpec> prunedTargets = pruneTargetsWithoutDocumentTypes(query.getModel().getRestrict(), targets.data()); Results<Target, ErrorMessage> regularTargetHandlers = resolveSearchChains(prunedTargets, execution.searchChainRegistry()); query.errors().addAll(regularTargetHandlers.errors()); Set<Target> targetHandlers = new LinkedHashSet<>(regularTargetHandlers.data()); targetHandlers.addAll(getAdditionalTargets(query, execution, targetSelector)); traceTargets(query, targetHandlers); if (targetHandlers.isEmpty()) return mergedResults; else if (targetHandlers.size() > 1) search(query, execution, targetHandlers, mergedResults); else if (shouldExecuteTargetLongerThanThread(query, targetHandlers.iterator().next())) search(query, execution, targetHandlers, mergedResults); // one target, but search in separate thread else search(query, execution, first(targetHandlers), mergedResults); // search in this thread return mergedResults; }
public static Parsable fromQueryModel(Model model) { return new Parsable() .setModel(model) .setQuery(model.getQueryString()) .setFilter(model.getFilter()) .setExplicitLanguage(Optional.ofNullable(model.getLanguage())) .setDefaultIndexName(model.getDefaultIndex()) .addSources(model.getSources()) .addRestricts(model.getRestrict()) .setSelect(model.getParent().getSelect()); }
if (key.last().equals(Model.SOURCES)) return model.getSources(); if (key.last().equals(Model.SEARCH_PATH)) return model.getSearchPath(); if (key.last().equals(Model.RESTRICT)) return model.getRestrict();
@Override public com.yahoo.search.Result search(Query query, Execution execution) { Location location = query.getRanking().getLocation(); if (location != null && (location.getAttribute() == null)) { IndexFacts facts = execution.context().getIndexFacts(); List<String> search = facts.newSession(query.getModel().getSources(), query.getModel().getRestrict()).documentTypes(); for (String sd : search) { String defaultPosition = facts.getDefaultPosition(sd); if (defaultPosition != null) { location.setAttribute(defaultPosition); } } if (location.getAttribute() == null) { location.setAttribute(facts.getDefaultPosition(null)); } } return execution.search(query); }
/** * Convert String to query tree * * @param stringToParse The string to be converted to a * query tree * @param query Query object from searcher * @return Item The resulting query tree */ static Item convertStringToQTree(Query query, String stringToParse) { RewriterUtils.log(logger, query, "Converting string [" + stringToParse + "] to query tree"); if(stringToParse==null) { return new NullItem(); } Model model = query.getModel(); CustomParser parser = (CustomParser) ParserFactory.newInstance(model.getType(), ParserEnvironment.fromExecutionContext(query.getModel().getExecution().context())); IndexFacts indexFacts = new IndexFacts(); Item item = parser.parse(stringToParse, null, model.getParsingLanguage(), indexFacts.newSession(model.getSources(), model.getRestrict()), model.getDefaultIndex()); RewriterUtils.log(logger, query, "Converted string: [" + item.toString() + "]"); return item; }