/** * Encodes this query onto the given buffer * * @param buffer The buffer to encode the query to * @return the number of encoded items */ public int encode(ByteBuffer buffer) { return model.getQueryTree().encode(buffer); }
private List<Query> createQueries(Query query, Set<String> docTypes) { query.getModel().getQueryTree(); // performance: parse query before cloning such that it is only done once List<Query> retval = new ArrayList<>(docTypes.size()); if (docTypes.size() == 1) { query.getModel().setRestrict(docTypes.iterator().next()); retval.add(query); } else if ( ! docTypes.isEmpty() ) { for (String docType : docTypes) { Query q = query.clone(); q.setOffset(0); q.setHits(query.getOffset() + query.getHits()); q.getModel().setRestrict(docType); retval.add(q); } } return retval; }
private void prepareRankFeaturesFromModel(Ranking ranking) { Item root = getQueryTree().getRoot(); if (root != null) { List<Item> tagged = setUniqueIDs(root); addLabels(tagged, ranking); addConnectivityRankProperties(tagged, ranking); addSignificances(tagged, ranking); } }
/** Returns a string describing this query */ @Override public String toString() { String queryTree; // getQueryTree isn't exception safe try { queryTree = model.getQueryTree().toString(); } catch (Exception e) { queryTree = "[Could not parse user input: " + model.getQueryString() + "]"; } return "query '" + queryTree + "'"; }
Model model = query.getModel(); if (key.last().equals(Model.QUERY_STRING)) model.setQueryString(asString(value, "")); else if (key.last().equals(Model.TYPE)) model.setType(asString(value, "ANY")); else if (key.last().equals(Model.FILTER)) model.setFilter(asString(value, "")); else if (key.last().equals(Model.DEFAULT_INDEX)) model.setDefaultIndex(asString(value, "")); else if (key.last().equals(Model.LANGUAGE)) model.setLanguage(asString(value, "")); else if (key.last().equals(Model.LOCALE)) model.setLocale(asString(value, "")); else if (key.last().equals(Model.ENCODING)) model.setEncoding(asString(value,"")); else if (key.last().equals(Model.SEARCH_PATH)) model.setSearchPath(asString(value,"")); else if (key.last().equals(Model.SOURCES)) model.setSources(asString(value,"")); else if (key.last().equals(Model.RESTRICT)) model.setRestrict(asString(value,"")); else throwIllegalParameter(key.last(),Model.MODEL);
private Query normalizeBody(Query query, IndexFacts.Session indexFacts) { Item root = query.getModel().getQueryTree().getRoot(); Language language = query.getModel().getParsingLanguage(); if (root instanceof BlockItem) { List<Item> rootItems = new ArrayList<>(1); rootItems.add(root); ListIterator<Item> i = rootItems.listIterator(); i.next(); normalizeBlocks(language, indexFacts, (BlockItem) root, i); if ( ! rootItems.isEmpty()) // give up normalizing if the root was removed query.getModel().getQueryTree().setRoot(rootItems.get(0)); } else if (root instanceof CompositeItem) { query.getModel().getQueryTree().setRoot(normalizeComposite(language, indexFacts, (CompositeItem) root)); } return query; }
QueryTree qTree = queryModel.getQueryTree(); Iterator<Phrase> matchesIter = matches.iterator(); CompositeItem parent = null; queryModel.setType(Query.Type.ADVANCED); //set type=adv RewriterUtils.log(logger, query, "Successfully added expansions to matching phrases"); return query;
/** * 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()); } }
query.getModel().getQueryTree().setRoot(newTree.getRoot()); query.getPresentation().getSummaryFields().addAll(parser.getYqlSummaryFields()); for (VespaGroupingStep step : parser.getGroupingSteps()) { query.getModel().getSources().clear(); } else { query.getModel().getSources().addAll(parser.getYqlSources());
private Result doSearch(Searcher searcher, Query query, Execution execution) { Result result; if (documentTypes.size() > 1) { result = searchMultipleDocumentTypes(searcher, query, execution); } else { String docType = documentTypes.iterator().next(); Result invalidRankProfile = checkValidRankProfiles(query, documentTypes); if (invalidRankProfile != null) { return invalidRankProfile; } query.getModel().setRestrict(docType); result = searcher.search(query, execution); } updateCacheHitRatio(result, query); return result; }
/** * Sets the document selection criterion of the query. * * @param where the documents to select as a JSON string on the format specified in * <a href="https://docs.vespa.ai/documentation/reference/select-reference.html">the select reference doc</a> */ public void setWhereString(String where) { this.where = where; parent.getModel().setType(SELECT); // This replaces the current query parent.getModel().clearQueryTree(); }
private void collectTaggableItems(Item root, List<Item> terms) { if (root == null) return; if (root instanceof TaggableItem) { // This is tested before descending, as phrases are viewed // as leaf nodes in the ranking code in the backend terms.add(root); } else if (root instanceof CompositeItem) { CompositeItem c = (CompositeItem) root; for (Iterator<Item> i = c.getItemIterator(); i.hasNext();) { collectTaggableItems(i.next(), terms); } } else {} // nop }
/** * Set the query from a string. This will not be parsed into a query tree until that tree is attempted accessed. * Note that setting this will clear the current query tree. Usually, this should <i>not</i> be modified - * changes to the query should be implemented as modifications on the query tree structure. * <p> * Passing null causes this to be set to an empty string. */ public void setQueryString(String queryString) { if (queryString == null) queryString=""; this.queryString = queryString; clearQueryTree(); }
private void copyPropertiesTo(Query clone) { clone.model = model.cloneFor(clone); clone.select = select.cloneFor(clone); clone.ranking = (Ranking) ranking.clone(); clone.presentation = (Presentation) presentation.clone(); clone.context = getContext(true).cloneFor(clone); // Correct the Query instance in properties clone.properties().setParentQuery(clone); assert (clone.properties().getParentQuery() == clone); clone.setTraceLevel(getTraceLevel()); clone.setHits(getHits()); clone.setOffset(getOffset()); clone.setNoCache(getNoCache()); clone.setGroupingSessionCache(getGroupingSessionCache()); clone.requestId = null; // Each clone should have their own requestId. }
/** Returns a string describing this query in more detail */ public String toDetailString() { String queryTree; // getQueryTree isn't exception safe try { queryTree = model.getQueryTree().toString(); } catch (Exception e) { queryTree = "Could not parse user input: " + model.getQueryString(); } return "query=[" + queryTree + "]" + " offset=" + getOffset() + " hits=" + getHits() + "]"; }
private Item replaceTerms(Query q, IndexFacts.Session indexFacts) { Language language = q.getModel().getParsingLanguage(); if (language == Language.UNKNOWN) { return q.getModel().getQueryTree().getRoot(); } StemContext context = new StemContext(); context.isCJK = language.isCjk(); context.language = language; context.indexFacts = indexFacts; context.reverseConnectivity = createReverseConnectivities(q.getModel().getQueryTree().getRoot()); return scan(q.getModel().getQueryTree().getRoot(), context); }
QueryTree qTree = queryModel.getQueryTree(); Item oldRoot = qTree.getRoot(); queryModel.setType(Query.Type.ADVANCED); //set type=adv RewriterUtils.log(logger, query, "Added rewrite successfully");
s.append(sourceName).append(" " + type + " to dispatch: ") .append("query=[") .append(query.getModel().getQueryTree().getRoot().toString()) .append("]"); if (query.getModel().getRestrict() != null) { s.append(" restrict=").append(query.getModel().getRestrict().toString()); if (query.isTraceable(level + 1)) { query.trace("Current state of query tree: " + new TextualQueryRepresentation(query.getModel().getQueryTree().getRoot()), false, level+1);
public Result search(Query query, Execution execution) { // Get tensor and read items from user profile Object userIdProperty = query.properties().get("user_id"); if (userIdProperty != null) { Hit userProfile = retrieveUserProfile(userIdProperty.toString(), execution); if (userProfile != null) { addUserProfileTensorToQuery(query, userProfile); NotItem notItem = new NotItem(); notItem.addItem(new IntItem(1, "has_user_item_cf")); for (String item : getReadItems(userProfile.getField("has_read_items"))){ notItem.addItem(new WordItem(item, "post_id")); } QueryTreeUtil.andQueryItemWithRoot(query, notItem); } } // Restrict to search in blog_posts query.getModel().setRestrict("blog_post"); // Rank blog posts using tensor rank profile if(query.properties().get("ranking") == null) { query.properties().set(new CompoundName("ranking"), "tensor"); } return execution.search(query); }