php8
[web.mtrack] / MTrack / SearchDB.php
1 <?php
2
3 require_once 'MTrack/Interface/SearchEngine.php';
4 require_once 'MTrack/SearchResult.php';
5
6
7 require_once 'MTrack/search/lucene.php';
8 require_once 'MTrack/search/solr.php';
9
10
11
12
13 class MTrackSearchDB {
14   static $index = null;
15   static $engine = null;
16
17   static function getEngine() {
18     if (self::$engine === null) {
19       $name = MTrackConfig::get('core', 'search_engine');
20       if (!$name) $name = 'MTrackSearchEngineLucene';
21       self::$engine = new $name;
22     }
23     return self::$engine;
24   }
25
26   /* functions that can perform indexing */
27   static $funcs = array();
28
29   static function register_indexer($id, $func)
30   {
31     self::$funcs[$id] = $func;
32   }
33
34   static function index_object($id)
35   {
36     $key = $id;
37     while (strlen($key)) {
38       if (isset(self::$funcs[$key])) {
39         break;
40       }
41       $new_key = preg_replace('/:[^:]+$/', '', $key);
42       if ($key == $new_key) {
43         break;
44       }
45       $key = $new_key;
46     }
47
48     if (isset(self::$funcs[$key])) {
49       $func = self::$funcs[$key];
50       return call_user_func($func, $id);
51     }
52     return false;
53   }
54
55   static function get() {
56     return self::getEngine()->getIdx();
57   }
58
59   static function setBatchMode() {
60     self::getEngine()->setBatchMode();
61   }
62
63   static function commit($optimize = false) {
64     self::getEngine()->commit($optimize);
65   }
66
67   static function add($object, $fields, $replace = false) {
68     self::getEngine()->add($object, $fields, $replace);
69   }
70
71   static function search($query) {
72     return self::getEngine()->search($query);
73   }
74 }