* @copyright Copyright (C) 2010, Uwe Steinmann * @version Release: @package_version@ */ /** * Class for searching in a SQlite FTS index. * * @category DMS * @package SeedDMS_Lucene * @version @version@ * @author Uwe Steinmann * @copyright Copyright (C) 2011, Uwe Steinmann * @version Release: @package_version@ */ class SeedDMS_SQliteFTS_Search { /** * @var object $index SQlite FTS index * @access protected */ protected $index; /** * Create a new instance of the search * * @param object $index SQlite FTS index * @return object instance of SeedDMS_SQliteFTS_Search */ function __construct($index) { /* {{{ */ $this->index = $index; $this->version = '@package_version@'; if($this->version[0] == '@') $this->version = '3.0.0'; } /* }}} */ /** * Get hit from index * * @param object $index lucene index * @return object instance of SeedDMS_Lucene_Document of false */ function getDocument($id) { /* {{{ */ $hits = $this->index->findById((int) $id); return $hits ? $hits[0] : false; } /* }}} */ /** * Search in index * * @param object $index SQlite FTS index * @return object instance of SeedDMS_Lucene_Search */ function search($term, $fields=array(), $limit=array()) { /* {{{ */ $querystr = ''; if($term) $querystr .= trim($term); if(!empty($fields['owner'])) { if(is_string($fields['owner'])) { if($querystr) $querystr .= ' '; $querystr .= 'owner:'.$fields['owner']; } elseif(is_array($fields['owner'])) { if($querystr) $querystr .= ' '; $querystr .= '(owner:'; $querystr .= implode(' OR owner:', $fields['owner']); $querystr .= ')'; } } if(!empty($fields['category'])) { if($querystr) $querystr .= ' '; $querystr .= '(category:'; $querystr .= implode(' OR category:', $fields['category']); $querystr .= ')'; } if(!empty($fields['status'])) { if($querystr) $querystr .= ' '; $status = array_map(function($v){return $v+10;}, $fields['status']); $querystr .= '(status:'; $querystr .= implode(' OR status:', $status); $querystr .= ')'; } if(!empty($fields['user'])) { if($querystr) $querystr .= ' '; $querystr .= '(users:'; $querystr .= implode(' OR users:', $fields['user']); $querystr .= ')'; } try { $result = $this->index->find($querystr, $limit); $recs = array(); foreach($result["hits"] as $hit) { $recs[] = array('id'=>$hit->id, 'document_id'=>$hit->id); } return array('count'=>$result['count'], 'hits'=>$recs, 'facets'=>array()); } catch (Exception $e) { return false; } } /* }}} */ } ?>