Невозможно обновить параметры запроса в пользовательском компоненте поиска. - PullRequest
0 голосов
/ 24 января 2019

Я написал Solr Custom Search Component, как описано здесь

Моя цель состоит в том, чтобы обновить параметры запроса, в частности, чтобы как можно раньше удалять кавычки 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 голосов
/ 24 января 2019

Проблема здесь в том, что

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 дляпроверьте обновленные параметры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...