Johnny
Johnny

Reputation: 361

Cannot update request parameters in custom Search Component

I have written Solr Custom Search Component as described here

My goal is to update the query parameters, specifically to remove Unicode Quotes as early as possible in the pipeline.

However, after intercepting the request and editing the parameters, the request does not seem to update.

public void updateSolrRequest(SolrQueryRequest req) {
  SolrParams params = req.getParams();
  System.out.println( "params = " +  req.getParamString());
  String newQuery = params.get(CommonParams.Q);
  newQuery = newQuery.toString().replaceAll("[A]","XXX");
  ModifiableSolrParams newParams = new ModifiableSolrParams(params);
  newParams.remove(CommonParams.Q);
  newParams.add(CommonParams.Q, newQuery);

  // all good to here, the next line should 
  // overwrite the old params with the new ones
  // but it does not
  req.setParams(newParams);
  System.out.println("newQuery = " + newQuery);
  System.out.println("newParams = " + newParams.get(CommonParams.Q));
  System.out.println("updated req = " + req.getParamString());
}

Output

params = q=“A+Game+of+Thrones“&defType=dismax&q.alt=thrones&fq=Game&_=1548262845155
newQuery = “XXX Game of Thrones“
newParams = “XXX Game of Thrones“
updated req = q=“A+Game+of+Thrones“&defType=dismax&q.alt=thrones&fq=Game&_=1548262845155

Upvotes: 0

Views: 83

Answers (1)

Mysterion
Mysterion

Reputation: 9320

The problem here is, that

public String getParamString() {
    return origParams.toString();
}

is actually returning original params, which aren't affected by setParams called

  /** Change the parameters for this request.  This does not affect
   *  the original parameters returned by getOriginalParams()
   */
  void setParams(SolrParams params);

You should use org.apache.solr.request.SolrQueryRequest#getParams to check your updated parameters.

Upvotes: 1

Related Questions