new parameters of search()

This commit is contained in:
Uwe Steinmann 2020-09-12 13:40:53 +02:00
parent 364612f497
commit c93faff257
2 changed files with 56 additions and 35 deletions

View File

@ -59,30 +59,42 @@ class SeedDMS_Lucene_Search {
* @param object $index lucene index * @param object $index lucene index
* @return object instance of SeedDMS_Lucene_Search * @return object instance of SeedDMS_Lucene_Search
*/ */
function search($term, $owner, $status='', $categories=array(), $fields=array(), $users=array()) { /* {{{ */ function search($term, $fields=array()) { /* {{{ */
$querystr = ''; $querystr = '';
if($fields) { if($term)
} else { $querystr .= trim($term);
if($term) if(isset($fields['owner'])) {
$querystr .= trim($term); if(is_string($owner)) {
if($querystr)
$querystr .= ' && ';
$querystr .= 'owner:'.$owner;
} elseif(is_array($fields['owner'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(owner:"';
$querystr .= implode('" || owner:"', $fields['owner']);
$querystr .= '")';
}
} }
if($owner) { if(isset($fields['category'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= 'owner:'.$owner;
}
if($categories) {
if($querystr) if($querystr)
$querystr .= ' && '; $querystr .= ' && ';
$querystr .= '(category:"'; $querystr .= '(category:"';
$querystr .= implode('" || category:"', $categories); $querystr .= implode('" || category:"', $fields['category']);
$querystr .= '")'; $querystr .= '")';
} }
if($users) { if(isset($fields['status'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(status:"';
$querystr .= implode('" || status:"', $fields['status']);
$querystr .= '")';
}
if(isset($fields['user'])) {
if($querystr) if($querystr)
$querystr .= ' && '; $querystr .= ' && ';
$querystr .= '(users:"'; $querystr .= '(users:"';
$querystr .= implode('" || users:"', $users); $querystr .= implode('" || users:"', $fields['user']);
$querystr .= '")'; $querystr .= '")';
} }
try { try {
@ -93,7 +105,7 @@ class SeedDMS_Lucene_Search {
foreach($hits as $hit) { foreach($hits as $hit) {
$recs[] = array('id'=>$hit->id, 'document_id'=>$hit->document_id); $recs[] = array('id'=>$hit->id, 'document_id'=>$hit->document_id);
} }
return array('count'=>count($hits), 'hits'=>$recs); return array('count'=>count($hits), 'hits'=>$recs, 'facets'=>array());
} catch (Zend_Search_Lucene_Exception $e) { } catch (Zend_Search_Lucene_Exception $e) {
return false; return false;
} }

View File

@ -59,35 +59,44 @@ class SeedDMS_SQliteFTS_Search {
* @param object $index SQlite FTS index * @param object $index SQlite FTS index
* @return object instance of SeedDMS_Lucene_Search * @return object instance of SeedDMS_Lucene_Search
*/ */
function search($term, $owner, $status='', $categories=array(), $fields=array(), $users=array()) { /* {{{ */ function search($term, $fields=array()) { /* {{{ */
$querystr = ''; $querystr = '';
if($fields) { if($term)
} else { $querystr .= trim($term);
if($term) if(isset($fields['owner'])) {
$querystr .= trim($term); 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($owner) { if(isset($fields['category'])) {
if($querystr) if($querystr)
$querystr .= ' '; $querystr .= ' ';
//$querystr .= ' AND '; $querystr .= '(category:';
$querystr .= 'owner:'.$owner; $querystr .= implode(' OR category:', $fields['category']);
//$querystr .= $owner; $querystr .= ')';
} }
if($categories) { if(isset($fields['status'])) {
if($querystr) if($querystr)
$querystr .= ' '; $querystr .= ' ';
//$querystr .= ' AND '; $status = array_map(function($v){return $v+10;}, $fields['status']);
$querystr .= 'category:'; $querystr .= '(status:';
$querystr .= implode(' OR category:', $categories); $querystr .= implode(' OR status:', $status);
$querystr .= ''; $querystr .= ')';
} }
if($users) { if(isset($fields['user'])) {
if($querystr) if($querystr)
$querystr .= ' '; $querystr .= ' ';
//$querystr .= ' AND '; $querystr .= '(users:';
$querystr .= 'users:'; $querystr .= implode(' OR users:', $fields['user']);
$querystr .= implode(' OR users:', $users); $querystr .= ')';
$querystr .= '';
} }
try { try {
$result = $this->index->find($querystr); $result = $this->index->find($querystr);
@ -95,7 +104,7 @@ class SeedDMS_SQliteFTS_Search {
foreach($result["hits"] as $hit) { foreach($result["hits"] as $hit) {
$recs[] = array('id'=>$hit->id, 'document_id'=>$hit->id); $recs[] = array('id'=>$hit->id, 'document_id'=>$hit->id);
} }
return array('count'=>$result['count'], 'hits'=>$recs); return array('count'=>$result['count'], 'hits'=>$recs, 'facets'=>array());
} catch (Exception $e) { } catch (Exception $e) {
return false; return false;
} }