无法更新自定义搜索组件中的请求参数

时间:2019-01-24 11:12:30

标签: solr lucene

我已经按照here

的描述编写了Solr自定义搜索组件。

我的目标是更新查询参数,特别是在管道中尽早删除Unicode引号。

但是,在拦截请求并编辑参数之后,请求似乎没有更新。

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());
}

输出

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

1 个答案:

答案 0 :(得分:1)

这里的问题是

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

实际上返回的是原始参数,不受setParams的影响

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

您应该使用org.apache.solr.request.SolrQueryRequest#getParams来检查更新的参数。