private ResponseBuilder substituteField()

in opennlp-similarity/src/main/java/opennlp/tools/similarity/apps/solr/IterativeQueryComponent.java [102:186]


	private ResponseBuilder substituteField(ResponseBuilder rb, String newFieldName) {
		SolrParams params = rb.req.getParams();
		String query = params.get("q");
		String currField = StringUtils.substringBetween(" "+query, " ", ":");
		if ( currField !=null && newFieldName!=null)
			query = query.replace(currField, newFieldName);
		NamedList<Object> values = params.toNamedList();
		values.remove("q");
		values.add("q", query);
		params = values.toSolrParams();
		rb.req.setParams(params);
		rb.setQueryString(query);


		String defType = params.get(QueryParsing.DEFTYPE,QParserPlugin.DEFAULT_QTYPE);

		// get it from the response builder to give a different component a chance
		// to set it.
		String queryString = rb.getQueryString();
		if (queryString == null) {
			// this is the normal way it's set.
			queryString = params.get( CommonParams.Q );
			rb.setQueryString(queryString);
		}

		QParser parser = null;
		try {
			parser = QParser.getParser(rb.getQueryString(), defType, rb.req);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Query q = null;
		try {
			q = parser.getQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (q == null) {
			// normalize a null query to a query that matches nothing
			q = new BooleanQuery.Builder().build();
		}
		rb.setQuery( q );
		try {
			rb.setSortSpec(parser.getSortSpec(true));
		} catch (Exception e) {
			e.printStackTrace();
		}
		rb.setQparser(parser);
		/*
		try {
				rb.setScoreDoc(parser.getPaging());
			} catch (Exception e) {
				e.printStackTrace();
		}
		*/
		String[] fqs = rb.req.getParams().getParams(CommonParams.FQ);
		if (fqs!=null && fqs.length!=0) {
			List<Query> filters = rb.getFilters();
			if (filters==null) {
				filters = new ArrayList<>(fqs.length);
			}
			for (String fq : fqs) {
				if (fq != null && fq.trim().length()!=0) {
					QParser fqp = null;
					try {
						fqp = QParser.getParser(fq, null, rb.req);
					} catch (Exception e) {
						e.printStackTrace();
					}
					try {
						filters.add(fqp.getQuery());
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
			// only set the filters if they are not empty otherwise
			// fq=&someotherParam= will trigger all docs filter for every request 
			// if filter cache is disabled
			if (!filters.isEmpty()) {
				rb.setFilters( filters );
			}
		}
		return rb;
	}