Использование Solr V2 API для обновления конфигурации Solr в автономном режиме выдает исключение SolrException «Solr не работает в облачном режиме» - PullRequest
0 голосов
/ 28 февраля 2020

Попытка изменить конфигурацию с API V2 в Solr, работающем в автономном режиме.

Запрос построен следующим образом:

V2Request v2Request = new V2Request.Builder(String.format("/collections/%s/config", collectionName))
                                                    .withMethod(SolrRequest.METHOD.POST)
                                                    .withPayload(actionPayLoad)
                                                    .build();

В результате SolrException: "Solr не запущен в облачном режиме "

Похоже, что запрос V2 Http генерируется через org. apache .solr.apiV2HttpCall (Maven: org. apache .solr: solr-core: 7.0.0), который требует запустите Zookeeper

  protected DocCollection getDocCollection(String collectionName) {
    if (!cores.isZooKeeperAware()) {
      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Solr not running in cloud mode ");
    }

Есть ли эквивалентный вызов API Config для Solr, работающего в автономном режиме, поэтому без Zookeeper?

только что заметил из https://lucene.apache.org/solr/guide/7_0/config-api.html, что он должен работать похожим образом:

Config API позволяет манипулировать различными аспектами вашего solrconfig. xml с помощью REST-подобных API> вызовов. Эта функция включена по умолчанию и работает одинаково как в SolrCloud, так и в автономном режиме. > Многие обычно редактируемые свойства (например, размеры кэша и параметры фиксации) и определения обработчика запросов могут быть изменены с помощью этого API.

1 Ответ

0 голосов
/ 06 марта 2020

Вот решение для обновления конфигурации Solr через V1 API:

Collection<ContentStream> contentStreams = ClientUtils.toContentStreams(actionPayLoad, "application/json; charset=UTF-8");
                GenericSolrRequest request = new GenericSolrRequest(SolrRequest.METHOD.POST, String.format("/%s/config", collectionName), null);
                request.setContentStreams(contentStreams);
                request.setUseV2(false);
...