ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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  return self::$instance;
71  }
72  return self::$instance = new ilLuceneSearcher($qp);
73  }
74 
79  public function setType($a_type)
80  {
81  $this->type = $a_type;
82  }
83 
88  public function getType()
89  {
90  return $this->type;
91  }
92 
93 
98  public function search()
99  {
100  $this->performSearch();
101  }
102 
108  public function highlight($a_obj_ids)
109  {
110  global $DIC;
111 
112  $ilBench = $DIC['ilBench'];
113  $ilSetting = $DIC['ilSetting'];
114 
115  include_once './Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
116 
117  // TODO error handling
118  if (!$this->query_parser->getQuery()) {
119  return;
120  }
121 
122  // Search in combined index
123  $ilBench->start('Lucene', 'SearchHighlight');
124  try {
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  } catch (Exception $e) {
132  ilLoggerFactory::getLogger('src')->error('Highlighting failed with message: ' . $e->getMessage());
133  return new ilLuceneHighlighterResultParser();
134  }
135 
136  include_once './Services/Search/classes/Lucene/class.ilLuceneHighlighterResultParser.php';
137  $this->highlighter = new ilLuceneHighlighterResultParser();
138  $this->highlighter->setResultString($res);
139  $this->highlighter->parse();
140 
141  return $this->highlighter;
142  }
143 
149  public function nextResultPage()
150  {
151  $this->page_number++;
152  $this->performSearch();
153  }
154 
159  public function getHighlighter()
160  {
161  return $this->highlighter;
162  }
163 
169  public function getResult()
170  {
171  if ($this->result instanceof ilLuceneSearchResult) {
172  return $this->result;
173  }
174  // TODO Error handling
175  }
176 
182  public function getPageNumber()
183  {
184  return $this->page_number;
185  }
186 
191  protected function performSearch()
192  {
193  global $DIC;
194 
195  $ilBench = $DIC['ilBench'];
196  $ilSetting = $DIC['ilSetting'];
197 
198  // TODO error handling
199  if (!$this->query_parser->getQuery()) {
200  return;
201  }
202  $ilBench->start('Lucene', 'SearchCombinedIndex');
203  try {
204  switch ($this->getType()) {
205 
206  case self::TYPE_USER:
207  include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
208  $res = ilRpcClientFactory::factory('RPCSearchHandler')->searchUsers(
209  CLIENT_ID . '_' . $ilSetting->get('inst_id', 0),
210  (string) $this->query_parser->getQuery()
211  );
212  break;
213 
214  case self::TYPE_STANDARD:
215  default:
216  include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
217  $res = ilRpcClientFactory::factory('RPCSearchHandler')->search(
218  CLIENT_ID . '_' . $ilSetting->get('inst_id', 0),
219  (string) $this->query_parser->getQuery(),
220  $this->getPageNumber()
221  );
222  break;
223 
224  }
225  ilLoggerFactory::getLogger('src')->debug('Searching for: ' . $this->query_parser->getQuery());
226  } catch (Exception $e) {
227  ilLoggerFactory::getLogger('src')->error('Searching failed with message: ' . $e->getMessage());
228  return;
229  }
230 
231  // Parse results
232  include_once './Services/Search/classes/Lucene/class.ilLuceneSearchResultParser.php';
234  $parser->parse($this->result);
235  return;
236  }
237 }
Parses result XML from lucene search highlight.
global $DIC
Definition: saml.php:7
static factory($a_package, $a_timeout=0)
Creates an ilRpcClient instance to our ilServer.
static getInstance(ilLuceneQueryParser $qp)
Get singleton instance.
__construct($qp)
Constructor.
getHighlighter()
get highlighter
$a_type
Definition: workflow.php:92
Reads and parses lucene search results.
Search result implementing iterator interface.
foreach($_POST as $key=> $value) $res
setType($a_type)
Set search type.
performSearch()
search lucene
getPageNumber()
get current page number
$parser
Definition: BPMN2Parser.php:23
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