Онлайн-руководство разработчика NetCat
Новогодние скидки до 25%!
Подробнее
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Подключение других поисковых систем

Существует возможность заменить поставляемые с модулем поиска поисковые механизмы на другие, например, на Sphinx, Solr или даже внешнюю поисковую систему, такую как Яндекс.XML или Google Site Search. Такая потребность может возникнуть в случае неудовлетворительной производительности встроенных библиотек на медленном сервере, при большой нагрузке или значительном объёме проиндексированной информации.

Для этого необходимо создать класс-адаптер для поисковой системы, реализующий интерфейс nc_search_provider. При этом, в зависимости от возможностей выбранной библиотеки, можно использовать или не использовать возможности, заложенные в модуль поиска (индексатор и HTTP-робот, анализаторы и фильтры текста, корректировщики запросов и т.п.).

Методы интерфейса nc_search_provider

public function first_run()
Тип: void

Метод вызывается однократно при первом запуске модуля после его установки и смене значения SearchProvider на вкладке «Настройки» — «Системные». В данном методе можно выполнить действия, необходимые для начала работы с поисковой системой.

public function check_environment()
Тип: void

Проверка правильности настроек PHP и окружения веб-сервера. Если имеются ошибки в конфигурации, метод должен вывести диагностические сообщения при помощи функции nc_print_status("Сообщение", "error"). Ошибки будут отображены на странице «Информация» в панели управления модулем.

public function process_document(nc_search_document $document)
Тип: void

Обработать документ (конкретный класс должен проверить, есть ли документ в индексе, и в зависимости от этого обновить существующий документ или добавить новый).

public function remove_document(nc_search_document $document)
Тип: void

Удаление документа из индекса.

public function commit()
Тип: void

Запись проделанных изменений в индекс (используется, когда при обработке документа в методах process_document() и remove_document() запись изменений на диск не производится, изменения сохраняются в памяти).

public function optimize()
Тип: void

Запуск оптимизации индекса, если таковая необходима (выполняется после окончания переиндексирования области).

public function find(nc_search_query $query[, boolean $should_highlight = true])
Тип: nc_search_result

Выполнение запроса $query. Параметр $should_highlight указывает, следует ли подсвечивать совпавшие слова в результатах. Метод должен вернуть объект класса nc_search_result, содержащий информацию о найденных документах в виде объектов класса nc_search_result_document. Для получения текста поискового запроса используйте метод $query->to_string().

public function index_area(string $area_string[, int $run_type = nc_search::INDEXING_NC_CRON])
Тип: void

Запуск переиндексирования области.

  • $area_string — идентификатор правила или описание индексируемой области

  • $run_type — тип запуска: запуск из консоли (nc_search::INDEXING_CONSOLE), из консоли с возможностью перезапуска процесса индексирования (nc_search::INDEXING_CONSOLE_BATCH), «Управления задачами» NetCat (nc_search::INDEXING_NC_CRON) или в «реальном времени» в браузере (nc_search::INDEXING_BROWSER).

Если ваша служба поиска имеет в своём составе HTTP-робот, который скачивает информацию с сайта, в этом методе необходимо послать команду на запуск переиндексирования. Пути страниц, описанных в $area_string можно получить следующим образом:

$area = new nc_search_area($area_string);
$urls = $area->get_urls(); // массив только со стартовыми URL

Механизм определения того, входит ли страница в заданную область, придётся реализовывать самостоятельно средствами поисковой службы.

Если HTTP-робота в службе поиска нет, используйте имеющийся в модуле поиска класс nc_search_indexer:

return nc_search_indexer::index_area($area_string, $runner_type);

public function schedule_indexing(string $area_string, int $timestamp)
Тип: void

Запланировать переиндексирование области или правила $area_string в указанное время ($timestamp — UNIX timestamp). Если вы используете индексатор, встроенный в модуль поиска:

return nc_search_scheduler::schedule_indexing($area_string, $timestamp);

public function is_reindexing()
Тип: mixed

Проверка на то, запущен ли в данный момент процесс индексирования. (Запуск нескольких задач индексирования одновременно невозможен, поскольку может привести к повреждению поискового индекса.)

Метод должен вернуть FALSE, если индексирование в момент вызова не запущено, иначе — объект nc_search_indexer_task в случае использования встроенного индексатора, или TRUE:

return nc_search_indexer::get_current_task();

public function suggest_titles(string $input, string $language, int $site_id)
Тип: array

Получить массив с заголовками страниц, подходящих под запрос пользователя ($input).

Метод должен вернуть двумерный массив с результатами или пустой массив, если подходящих заголовков не найдено. Каждый результат должен содержать элементы "label" (заголовок страницы) и "url" (путь до страницы).

public function has_term(string $term)
Тип: Boolean
TRUE, если слово имеется в поисковом индексе, иначе FALSE.

public function count_documents()
Тип: integer
Получить количество проиндексированных документов.

public function count_terms()
Тип: integer
Получить количество различных слов в поисковом индексе.

Желательно, чтобы ваш класс-адаптер мог использовать стандартный для модуля поиска синтаксис запросов. (Поисковый сервер Solr полностью совместим не только с языком запросов, но и с форматом файлов, используемых Zend_Search_Lucene, поскольку использует Java-библиотеку Lucene.)

Если вам необходима дополнительная информация о классах nc_search_document, nc_search_query, nc_search_area, вы можете узнать подробности из комментариев к их исходным кодам.

Активация адаптера

После создания класса-адаптера для поисковой службы необходимо добавить в таблицу Search_Extension запись о нём:

INSERT INTO Search_Extension SET ExtensionInterface='nc_search_provider', ExtensionClass='имя вашего класса';

На вкладке «Настройки» — «Системные» в поле «SearchProvider» укажите имя вашего класса.

Затем, исходя из возможностей службы поиска, необходимо на вкладке «Настройки» — «Расширения» указать расширения, используемые при обработке текста.

Описание проекта