Как справиться с отключением Solr в Codeigniter - PullRequest
0 голосов
/ 12 июня 2019

Я реализую поисковые функции с помощью solr через солярий в CodeIgniter.

Я запускаю свой веб-сайт без подключения к Solr (т. Е. Если подключение Solr прекращено), Мой веб-сайт выдает следующее предупреждение:

Обнаружено неперехваченное исключение

Тип: Солярий \ Исключение \ HttpException

Сообщение: Solr HTTP error: сбой HTTP-запроса, не удалось подключиться к локальному порту 8983: соединение отклонено

Имя файла: C: \ wamp \ www \ project-folder \ имя-проекта \ vendor \ solarium \ solarium \ src \ Core \ Client \ Adapter \ Curl.php

Номер строки: 170

Я сомневаюсь, есть ли возможность добавить обработку исключений в соединение solr.

Это означает, что если статус solr равен true, он работает как есть. Если статус solr равен false (не подключен), предупреждение об ошибке не отображается.

Этот сценарий возможен или нет при использовании обработки исключений.

Update

Страница моего контроллера,

        function __construct()
        {
          parent::__construct();
          $this->config->load('solarium');
          $this->client = new Solarium\Client($this->config->item('solarium_endpoint'));
        }

        public function solrQuery() 
        {
            $query = $this->client->createSelect();

            $query->setStart(0)->setRows(1000);

            // get the facetset component
            $facetSet = $query->getFacetSet();

            $facetSet->createFacetField('product_category_1')->setField('product_category_1');

            $categories_data = $this->client->select($query);
        }

1 Ответ

0 голосов
/ 13 июня 2019

Окружить соответствующие биты кода, которые генерируют исключения в блоке try-catch, следующим образом:

function __construct() {
    parent::__construct();
    $this->config->load('solarium');
    try {
        $this->client = new Solarium\Client($this->config->item('solarium_endpoint'));
    } catch (\Exception $e) {
        show_error($e->getMessage());
    }
}

public function solrQuery() {
    try {
        $query = $this->client->createSelect();

        $query->setStart(0)->setRows(1000);

        // get the facetset component
        $facetSet = $query->getFacetSet();

        $facetSet->createFacetField('product_category_1')->setField('product_category_1');

        $categories_data = $this->client->select($query);
    } catch (\Exception $e) {
        show_error($e->getMessage());
    }
}

Конечно, вы не можете использовать show_error() и вместо этого можете вернуть false или установить собственные заголовки и собственное сообщение.

...