ILIAS  release_7 Revision v7.30-3-g800a261c036
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
24include_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;
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());
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
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';
233 $parser = new ilLuceneSearchResultParser($res);
234 $parser->parse($this->result);
235 return;
236 }
237}
An exception for terminatinating execution or to throw for unit testing.
static getLogger($a_component_id)
Get component logger.
Parses result XML from lucene search highlight.
Search result implementing iterator interface.
Reads and parses lucene search results.
performSearch()
search lucene
highlight($a_obj_ids)
Highlight/Detail query.
__construct($qp)
Constructor.
static getInstance(ilLuceneQueryParser $qp)
Get singleton instance.
getPageNumber()
get current page number
nextResultPage()
get next result page
setType($a_type)
Set search type.
getHighlighter()
get highlighter
static factory($a_package, $a_timeout=0)
Creates an ilRpcClient instance to our ilServer.
const CLIENT_ID
Definition: constants.php:39
global $DIC
Definition: goto.php:24
global $ilBench
Definition: ilias.php:21
global $ilSetting
Definition: privfeed.php:17
foreach($_POST as $key=> $value) $res