Имеется возможность индексировать файлы различных типов. Обработчик документа должен реализовать интерфейс 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')
.