public function searchFetch($loader_class_name, &$counter, $params = array(), $fetch_method = 'fetch_accessible_by_ids')
 {
     if (!$this->_query_object) {
         return array();
     }
     $site_object = Limb::toolkit()->createSiteObject($loader_class_name);
     $restricted_classes = array();
     $allowed_classes = array();
     if (!isset($params['restrict_by_class']) || isset($params['restrict_by_class']) && (bool) $params['restrict_by_class']) {
         $class_id = $site_object->getClassId();
     } else {
         $class_id = null;
         if (isset($params['restricted_classes'])) {
             $restricted_classes = $this->_getClassesIdsFromString($params['restricted_classes']);
         }
         if (isset($params['allowed_classes'])) {
             $allowed_classes = $this->_getClassesIdsFromString($params['allowed_classes']);
         }
     }
     $search = new FullTextSearch();
     $search_result = $search->find($this->_query_object, $class_id, $restricted_classes, $allowed_classes);
     if (!count($search_result)) {
         return array();
     }
     $counter = 0;
     $count_method = $fetch_method . '_count';
     $counter = $site_object->{$count_method}(array_keys($search_result), $params);
     $fetched_objects = $site_object->{$fetch_method}(array_keys($search_result), $params);
     if (!count($fetched_objects)) {
         return array();
     }
     foreach ($search_result as $key => $score) {
         if (isset($fetched_objects[$key])) {
             $result[$key] = $fetched_objects[$key];
             $result[$key]['score'] = $score;
         }
     }
     Limb::toolkit()->getAuthorizer()->assignActionsToObjects($result);
     $this->_assignPaths($result);
     $this->_assignSearchPaths($result, isset($params['offset']) ? $params['offset'] : 0);
     return $result;
 }