public function search($query_string) { $database = new XapianDatabase(self::$_database_path); // Start an enquire session. $enquire = new XapianEnquire($database); $qp = new XapianQueryParser(); $stemmer = new XapianStem("english"); $qp->set_stemmer($stemmer); $qp->set_database($database); $qp->set_stemming_strategy(XapianQueryParser::STEM_SOME); $query = $qp->parse_query($query_string); // Find the top 10 results for the query. $enquire->set_query($query); $enquire->set_collapse_key(0, 1); //index '0' holds the file path, so we're collapsing on that value in order for a single value to be returned by the system $matches = $enquire->get_mset(0, $database->get_doccount()); $i = $matches->begin(); $results = array(); while (!$i->equals($matches->end())) { $n = $i->get_rank() + 1; try { $fileobj = new EfrontFile($i->get_document()->get_value('file')); $results[] = array('id' => $fileobj['id'], 'path' => str_replace(G_ROOTPATH, '', $fileobj['path']), 'login' => $fileobj['users_LOGIN'] ? $fileobj['users_LOGIN'] : '', 'date' => formatTimestamp(filemtime($fileobj['path']), 'time_nosec'), 'name' => $fileobj['name'], 'extension' => $fileobj['extension'], 'score' => $i->get_percent(), 'content' => $i->get_document()->get_data(), 'icon' => $fileobj->getTypeImage()); } catch (Exception $e) { //don't halt for missing files } $i->next(); } return $results; }