ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilLuceneSearcher.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResult.php';
25 
36 {
37  const TYPE_STANDARD = 1;
38  const TYPE_USER = 2;
39 
40  private static $instance = null;
41 
42  private $query_parser = null;
43  private $result = null;
44  private $highlighter = null;
45  private $page_number = 1;
46  private $type = self::TYPE_STANDARD;
47 
53  private function __construct($qp)
54  {
55  $this->result = new ilLuceneSearchResult();
56  $this->result->setCallback(array($this,'nextResultPage'));
57  $this->query_parser = $qp;
58  }
59 
67  public static function getInstance(ilLuceneQueryParser $qp)
68  {
69  if(self::$instance)
70  {
71  return self::$instance;
72  }
73  return self::$instance = new ilLuceneSearcher($qp);
74  }
75 
80  public function setType($a_type)
81  {
82  $this->type = $a_type;
83  }
84 
89  public function getType()
90  {
91  return $this->type;
92  }
93 
94 
99  public function search()
100  {
101  $this->performSearch();
102  }
103 
109  public function highlight($a_obj_ids)
110  {
111  global $ilBench,$ilSetting;
112 
113  include_once './Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
114 
115  // TODO error handling
116  if(!$this->query_parser->getQuery())
117  {
118  return;
119  }
120 
121  // Search in combined index
122  $ilBench->start('Lucene','SearchHighlight');
123  try
124  {
125  include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
126  $res = ilRpcClientFactory::factory('RPCSearchHandler')->highlight(
127  CLIENT_ID.'_'.$ilSetting->get('inst_id',0),
128  $a_obj_ids,
129  $this->query_parser->getQuery()
130  );
131  }
132  catch(Exception $e)
133  {
134  ilLoggerFactory::getLogger('src')->error('Highlighting failed with message: ' . $e->getMessage());
135  return new ilLuceneHighlighterResultParser();
136  }
137 
138  include_once './Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
139  $this->highlighter = new ilLuceneHighlighterResultParser();
140  $this->highlighter->setResultString($res);
141  $this->highlighter->parse();
142 
143  return $this->highlighter;
144  }
145 
151  public function nextResultPage()
152  {
153  $this->page_number++;
154  $this->performSearch();
155  }
156 
161  public function getHighlighter()
162  {
163  return $this->highlighter;
164  }
165 
171  public function getResult()
172  {
173  if($this->result instanceof ilLuceneSearchResult)
174  {
175  return $this->result;
176  }
177  // TODO Error handling
178  }
179 
185  public function getPageNumber()
186  {
187  return $this->page_number;
188  }
189 
194  protected function performSearch()
195  {
196  global $ilBench,$ilSetting;
197 
198  // TODO error handling
199  if(!$this->query_parser->getQuery())
200  {
201  return;
202  }
203  $ilBench->start('Lucene','SearchCombinedIndex');
204  try
205  {
206  switch($this->getType())
207  {
208 
209  case self::TYPE_USER:
210  include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
211  $res = ilRpcClientFactory::factory('RPCSearchHandler')->searchUsers(
212  CLIENT_ID.'_'.$ilSetting->get('inst_id',0),
213  (string) $this->query_parser->getQuery()
214  );
215  break;
216 
217  case self::TYPE_STANDARD:
218  default:
219  include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
220  $res = ilRpcClientFactory::factory('RPCSearchHandler')->search(
221  CLIENT_ID.'_'.$ilSetting->get('inst_id',0),
222  (string) $this->query_parser->getQuery(),
223  $this->getPageNumber()
224  );
225  break;
226 
227  }
228  ilLoggerFactory::getLogger('src')->debug('Searching for: ' . $this->query_parser->getQuery());
229  }
230  catch(Exception $e)
231  {
232  ilLoggerFactory::getLogger('src')->error('Searching failed with message: ' . $e->getMessage());
233  return;
234  }
235 
236  // Parse results
237  include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultParser.php';
239  $parser->parse($this->result);
240  return;
241  }
242 }
243 ?>
Parses result XML from lucene search highlight.
static factory($a_package, $a_timeout=0)
Creates an ilRpcClient instance to our ilServer.
static getInstance(ilLuceneQueryParser $qp)
Get singleton instance.
__construct($qp)
Constructor.
Add rich text string
The name of the decorator.
getHighlighter()
get highlighter
$a_type
Definition: workflow.php:93
Reads and parses lucene search results.
Search result implementing iterator interface.
setType($a_type)
Set search type.
performSearch()
search lucene
Create styles array
The data for the language used.
getPageNumber()
get current page number
$parser
Definition: BPMN2Parser.php:24
global $ilSetting
Definition: privfeed.php:17
global $ilBench
Definition: ilias.php:18
highlight($a_obj_ids)
Highlight/Detail query.
static getLogger($a_component_id)
Get component logger.
nextResultPage()
get next result page