Имеется возможность индексировать файлы различных типов. Обработчик документа должен реализовать интерфейс nc_search_document_parser:
public function load (nc_search_indexer_crawler_response $response)
Тип: void
После загрузки документа индексатором будет вызван метод $parser->load(). Обработчик создается во время сессии индексирования однократно для каждого из типов документа, переключение на следующий документ производится вызовом метода load(), поэтому не забудьте сбросить в этом методе относящиеся к предыдущему документу свойства, если таковые имеются.
В качестве параметра передается экземпляр класса nc_search_indexer_crawler_response, у которого доступны следующие методы:
От обработчика зависит, что он будет делать с полученной информацией (например, может быть целесообразным использовать не содержимое ответа, а считать файл с локальной файловой системы).
public function should_index()
Тип: boolean
Обработчик должен вернуть TRUE, если загруженный документ подлежит индексированию. (Обработчик может принять решение о том, что документ не следует индексировать, например, исходя из каких-либо метаданных, имеющихся в документе.)
public function get_document()
Тип: nc_search_document
Метод должен вернуть экземпляр класса nc_search_document (далее — «документ»).
Каждый документ состоит из полей. Служба поиска сохраняет их в поисковом индексе и (или) в СУБД. У документа как минимум должны быть установлены значения полей title (заголовок документа) и content (содержимое):
$doc = new nc_search_document();
$doc->set_field_value('title', 'Заголовок');
$doc->set_field_value('content', 'Текст документа');
Документ может содержать и другие поля, которые будут использоваться при поиске — например, поля с бóльшим или меньшим весом:
$field = new nc_search_field(array(
'name' => 'important_field', // имя поля
'weight' => 3, // вес поля
));
$doc->add_field($field);
$doc->set_field_value('important_field', 'текст с весом 3');
public function extract_links()
Тип: array
Метод должен вернуть массив с гиперссылками, найденными в документе или пустой массив, если ссылок не найдено.
Образец скелета класса для индексирования PDF-документов:
<?php
// укажите путь до папки с модулем поиска (в данном примере предполагается,
// что класс находится в файле modules/default/function.inc.php):
require_once dirname(__FILE__) . "/../search/function.inc.php";
class my_pdf_parser implements nc_search_document_parser {
protected $content;
protected $file_name;
public function load(nc_search_indexer_crawler_response $response) {
$this->file_name = basename($response->get_url());
// тут нужно каким-то образом получить текстовое содержимое документа:
$this->content = pdf_get_content($response->get_body());
}
public function should_index() {
return true;
}
public function extract_links() {
return array();
}
public function get_document() {
$doc = new nc_search_document();
$doc->set_field_value('title', $this->file_name);
$doc->set_field_value('content', $this->content);
return $doc;
}
}
После создания класса нужно добавить запись о нём на вкладке «Настройки» — «Расширения». Для примера выше (обработка PDF-файлов) значения будут следующими: интерфейс расширения — nc_search_document_parser, класс расширения — my_pdf_parser, MIME-тип —application/pdf. После этого все документы, которые ваш веб-сервер отдаёт с заголовком Content-type: application/pdf будут обрабатываться указанным расширением.
public function check_environment()
Тип: void
Метод вызывается в панели управления модулем для проверки соответствия конфигурации PHP требованиям данного обработчика документов. Если для вашего обработчика необходимо наличие каких-либо дополнительных расширений PHP или определённые настройки PHP, в данном методе вы можете проверить выполнение этих условий, и в случае неправильной конфигурации вывести предупреждение с помощью функции nc_print_status('Сообщение', 'error').