예제 #1
0
파일: zend.php 프로젝트: Blu2z/implsk
 /**
  * Поиск по индексу
  * @param nc_search_query $query
  * @param boolean $should_highlight
  * @return nc_search_result
  */
 public function find(nc_search_query $query, $should_highlight = true)
 {
     nc_search::set_current_context(new nc_search_context(array('search_provider' => get_class($this), 'action' => 'searching', 'language' => $query->get('language'))));
     $index = $this->get_index();
     $lucene_query = $this->get_lucene_query($query);
     if ($query->get('sort_by')) {
         // custom sort
         $lucene_result = $index->find($lucene_query, $query->get('sort_by'), SORT_STRING, $query->get('sort_direction'));
     } else {
         $lucene_result = $index->find($lucene_query);
     }
     $total_hits = count($lucene_result);
     $result = new nc_search_result(array(), $total_hits);
     $result->set_query($query);
     if (!$should_highlight) {
         $result->disable_highlighting();
     }
     nc_search::set_current_context();
     // truncate to get the requested page only
     $lucene_result = array_slice($lucene_result, $query->get('offset'), $query->get('limit'));
     // сформировать nc_search_result
     $result_ids = array();
     foreach ($lucene_result as $hit) {
         $result_ids[] = $hit->doc_id;
     }
     if (count($result_ids)) {
         foreach ($result_ids as $i => $id) {
             $result_ids[$i] = (int) trim($id, "x");
         }
         $id_list = join(", ", $result_ids);
         $doc = new nc_search_result_document();
         $fields = $doc->get_column_names($query->get('options_to_fetch'));
         $query = "SELECT {$fields} FROM `%t%` WHERE `Document_ID` IN ({$id_list}) " . "ORDER BY FIELD(`Document_ID`, {$id_list})";
         $result->select_from_database($query);
     }
     return $result;
 }