예제 #1
0
파일: index.php 프로젝트: Blu2z/implsk
 /**
  * Обработать документ (конкретный класс должен проверить, есть ли документ
  * в индексе, и в зависимости от этого обновить существующий документ или добавить
  * новый)
  * @param nc_search_document $document
  * @return bool
  */
 public function process_document(nc_search_document $document)
 {
     $doc_hash = $document->generate_hash();
     // Есть ли документ с таким путём в нашей базе?
     $stored = nc_search_document::get_hash_by_path($document->get('site_id'), $document->get('path'));
     if ($stored) {
         $document->set_id($stored->get_id());
         // Нужно ли обновлять данные в индексе? Проверить хэш для content
         if ($stored->get('hash') == $doc_hash) {
             $document->save();
             return false;
             // ---- RETURN ----
         }
     }
     // Загрузить словарь в память?
     if (nc_search::should('DatabaseIndex_LoadAllCodesForIndexing')) {
         $this->load_dictionary();
     }
     // (1) Сохранение документа в `Search_Document`
     $document->save();
     $doc_id = $document->get_id();
     $doc_context = $this->create_document_context($document);
     $all_terms = array();
     // (2) Удаление старых данных из `Search_Index_FieldN`
     if ($stored) {
         $this->remove_document_fields($doc_id);
     }
     // (3) Обработка полей: сохранение данных в `Search_Index_FieldN`
     /** @var $field nc_search_field */
     foreach ($document->get_fields() as $field) {
         if (!isset($this->skipped_fields[$field->get('name')])) {
             $all_terms[] = $this->store_field($doc_id, $field, $doc_context);
         }
     }
     // (4) Сохранение искабельного текста в `Search_Index`
     $this->store_index_data($this->index_table_name, $doc_id, join('/', array_filter($all_terms)));
     return true;
 }
예제 #2
0
파일: zend.php 프로젝트: Blu2z/implsk
 /**
  *
  * @param nc_search_document $document
  */
 protected function mark_as_deleted(nc_search_document $document)
 {
     $doc_id = $this->pad_id($document->get_id());
     if (!$doc_id) {
         return;
     }
     // NO ID == not in the index
     $this->set_indexing_context($document);
     $index = $this->get_index();
     $hits = $index->find("doc_id:{$doc_id}");
     foreach ($hits as $hit) {
         $index->delete($hit->id);
     }
     $this->remove_indexing_context();
 }