private void addPageTemplateSources(Set<Source> pageSources,Query query) { for (Source pageSource : pageSources) { if (pageSource==Source.any) continue; query.getModel().getSources().add(pageSource.getName()); addParameters(pageSource,query); } }
private void addParametersForIncludedSources(Set<Source> sources,Query query) { for (Source source : sources) { if (source.parameters().size()>0 && query.getModel().getSources().contains(source.getName())) addParameters(source,query); } }
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()); }
Set<String> sources = query.getModel().getSources(); boolean validate = restrict != null && !restrict.isEmpty(); validate = validate || sources != null && !sources.isEmpty();
/** Sets query.getModel().getSources() to the right value and add source parameters specified in templates */ private void addSources(List<PageElement> pages,Query query) { // Determine all wanted sources Set<Source> pageSources=new HashSet<>(); for (PageElement page : pages) pageSources.addAll(((PageTemplate)page).getSources()); addErrorIfSameSourceMultipleTimes(pages,pageSources,query); if (query.getModel().getSources().size() > 0) { // Add properties if the source list is set explicitly, but do not modify otherwise addParametersForIncludedSources(pageSources,query); return; } if (pageSources.contains(Source.any)) { IntentModel intentModel=IntentModel.getFrom(query); if (intentModel!=null) { query.getModel().getSources().addAll(intentModel.getSourceNames()); addPageTemplateSources(pageSources,query); } // otherwise leave empty to search all } else { // Let the page templates decide addPageTemplateSources(pageSources,query); } }
Set<String> sources = getModel().getSources(); Set<String> fields = getPresentation().getSummaryFields(); StringBuilder yql = new StringBuilder("select ");
@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.LOCALE)) return model.getLocale(); if (key.last().equals(Model.ENCODING)) return model.getEncoding(); 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); }
query.getModel().getSources().clear(); } else { query.getModel().getSources().addAll(parser.getYqlSources());
/** * 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; }