public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { return new DisMaxQParser(qstr, localParams, params, req); } }
protected void addMainQuery(BooleanQuery query, SolrParams solrParams) throws ParseException { Map<String, Float> phraseFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.PF)); float tiebreaker = solrParams.getFloat(DisMaxParams.TIE, 0.0f); /* a parser for dealing with user input, which will convert * things to DisjunctionMaxQueries */ SolrPluginUtils.DisjunctionMaxQueryParser up = getParser(queryFields, DisMaxParams.QS, solrParams, tiebreaker); /* for parsing sloppy phrases using DisjunctionMaxQueries */ SolrPluginUtils.DisjunctionMaxQueryParser pp = getParser(phraseFields, DisMaxParams.PS, solrParams, tiebreaker); /* * * Main User Query * * */ parsedUserQuery = null; String userQuery = getString(); altUserQuery = null; if (userQuery == null || userQuery.trim().length() < 1) { // If no query is specified, we may have an alternate altUserQuery = getAlternateUserQuery(solrParams); query.add(altUserQuery, BooleanClause.Occur.MUST); } else { // There is a valid query string userQuery = SolrPluginUtils.partialEscape(SolrPluginUtils.stripUnbalancedQuotes(userQuery)).toString(); userQuery = SolrPluginUtils.stripIllegalOperators(userQuery).toString(); parsedUserQuery = getUserQuery(userQuery, up, solrParams); query.add(parsedUserQuery, BooleanClause.Occur.MUST); Query phrase = getPhraseQuery(userQuery, pp); if (null != phrase) { query.add(phrase, BooleanClause.Occur.SHOULD); } } }
public Query parse() throws ParseException { SolrParams solrParams = localParams == null ? params : new DefaultSolrParams(localParams, params); queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF)); /* the main query we will execute. we disable the coord because * this query is an artificial construct */ BooleanQuery query = new BooleanQuery(true); addMainQuery(query, solrParams); addBoostQuery(query, solrParams); addBoostFunctions(query, solrParams); return query; }
public DismaxSearchEngineRequestAdapter(final QParser qParser, final SolrQueryRequest request, final String queryString, final SolrParams solrParams, final QuerqyParser querqyParser, final RewriteChain rewriteChain, final TermQueryCache termQueryCache) { this.qParser = qParser; this.userQueryString = queryString; this.solrParams = solrParams; this.termQueryCache = termQueryCache; this.querqyParser = querqyParser; this.request = request; this.rewriteChain = rewriteChain; this.context = new HashMap<>(); final int ps0 = solrParams.getInt(PS, 0); final int ps2 = solrParams.getInt(PS2, ps0); final int ps3 = solrParams.getInt(PS3, ps0); final List<FieldParams> phraseFields = SolrPluginUtils .parseFieldBoostsAndSlop(solrParams.getParams(PF),0,ps0); final List<FieldParams> phraseFields2 = SolrPluginUtils .parseFieldBoostsAndSlop(solrParams.getParams(PF2),2,ps2); final List<FieldParams> phraseFields3 = SolrPluginUtils .parseFieldBoostsAndSlop(solrParams.getParams(PF3),3,ps3); allPhraseFields = new ArrayList<>(phraseFields.size() + phraseFields2.size() + phraseFields3.size()); allPhraseFields.addAll(phraseFields); allPhraseFields.addAll(phraseFields2); allPhraseFields.addAll(phraseFields3); minShouldMatch = DisMaxQParser.parseMinShouldMatch(request.getSchema(), solrParams); }