mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-02-11 09:35:00 +00:00
use new fulltext index interface with support for sqlitefts
This commit is contained in:
parent
b0413a0d46
commit
8ffcfab6e4
|
@ -293,15 +293,10 @@ for ($file_num=0;$file_num<count($_FILES["userfile"]["tmp_name"]);$file_num++){
|
|||
}
|
||||
}
|
||||
if($settings->_enableFullSearch) {
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
|
||||
$index = SeedDMS_Lucene_Indexer::open($settings->_luceneDir);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if($index) {
|
||||
SeedDMS_Lucene_Indexer::init($settings->_stopWordsFile);
|
||||
$index->addDocument(new SeedDMS_Lucene_IndexedDocument($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, true));
|
||||
$indexconf['Indexer']::init($settings->_stopWordsFile);
|
||||
$index->addDocument(new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -319,6 +319,17 @@ switch($command) {
|
|||
if($document) {
|
||||
if ($document->getAccessMode($user) >= M_READWRITE) {
|
||||
if($document->remove()) {
|
||||
/* Remove the document from the fulltext index */
|
||||
if($settings->_enableFullSearch) {
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if($index) {
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
if($hit = $lucenesearch->getDocument($_REQUEST['id'])) {
|
||||
$index->delete($hit->id);
|
||||
$index->commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
header('Content-Type', 'application/json');
|
||||
echo json_encode(array('success'=>true, 'message'=>'', 'data'=>''));
|
||||
} else {
|
||||
|
|
|
@ -62,16 +62,13 @@ if (!$document->remove()) {
|
|||
|
||||
/* Remove the document from the fulltext index */
|
||||
if($settings->_enableFullSearch) {
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
|
||||
$index = SeedDMS_Lucene_Indexer::open($settings->_luceneDir);
|
||||
if($index && $hits = $index->find('document_id:'.$documentid)) {
|
||||
$hit = $hits[0];
|
||||
$index->delete($hit->id);
|
||||
$index->commit();
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if($index) {
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
if($hit = $lucenesearch->getDocument($documentid)) {
|
||||
$index->delete($hit->id);
|
||||
$index->commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,21 +54,19 @@ $parent=$folder->getParent();
|
|||
* The callback must return true other the removal will be canceled.
|
||||
*/
|
||||
if($settings->_enableFullSearch) {
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
|
||||
$index = SeedDMS_Lucene_Indexer::open($settings->_luceneDir);
|
||||
function removeFromIndex($index, $document) {
|
||||
if($hits = $index->find('document_id:'.$document->getId())) {
|
||||
$hit = $hits[0];
|
||||
function removeFromIndex($arr, $document) {
|
||||
$index = $arr[0];
|
||||
$indexconf = $arr[1];
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
if($hit = $lucenesearch->getDocument($document->getID())) {
|
||||
$index->delete($hit->id);
|
||||
$index->commit();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
$dms->setCallback('onPreRemoveDocument', 'removeFromIndex', $index);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if($index)
|
||||
$dms->setCallback('onPreRemoveDocument', 'removeFromIndex', array($index, $indexconf));
|
||||
}
|
||||
|
||||
$nl = $folder->getNotifyList();
|
||||
|
|
|
@ -112,25 +112,13 @@ if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) {
|
|||
}
|
||||
}
|
||||
|
||||
$pageNumber=1;
|
||||
if (isset($_GET["pg"])) {
|
||||
if (is_numeric($_GET["pg"]) && $_GET["pg"]>0) {
|
||||
$pageNumber = (integer)$_GET["pg"];
|
||||
}
|
||||
else if (!strcasecmp($_GET["pg"], "all")) {
|
||||
$pageNumber = "all";
|
||||
}
|
||||
}
|
||||
|
||||
$startTime = getTime();
|
||||
if($settings->_enableFullSearch) {
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
if($settings->_fullSearchEngine == 'lucene') {
|
||||
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
|
||||
}
|
||||
}
|
||||
|
||||
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
|
||||
if(strlen($query) < 4 && strpos($query, '*')) {
|
||||
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
|
||||
$resArr = array();
|
||||
|
@ -140,8 +128,8 @@ if(isset($_GET["fullsearch"]) && $_GET["fullsearch"]) {
|
|||
$entries = array();
|
||||
$searchTime = 0;
|
||||
} else {
|
||||
$index = Zend_Search_Lucene::open($settings->_luceneDir);
|
||||
$lucenesearch = new SeedDMS_Lucene_Search($index);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
$hits = $lucenesearch->search($query, $owner ? $owner->getLogin() : '', '', $categorynames);
|
||||
if($hits === false) {
|
||||
$session->setSplashMsg(array('type'=>'error', 'msg'=>getMLText('splash_invalid_searchterm')));
|
||||
|
|
|
@ -34,12 +34,7 @@ if(!$settings->_enableFullSearch) {
|
|||
UI::exitError(getMLText("admin_tools"),getMLText("fulltextsearch_disabled"));
|
||||
}
|
||||
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
|
||||
$index = SeedDMS_Lucene_Indexer::open($settings->_luceneDir);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if(!$index) {
|
||||
UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex"));
|
||||
}
|
||||
|
|
|
@ -35,25 +35,20 @@ if(!$settings->_enableFullSearch) {
|
|||
UI::exitError(getMLText("admin_tools"),getMLText("fulltextsearch_disabled"));
|
||||
}
|
||||
|
||||
if(!empty($settings->_luceneClassDir))
|
||||
require_once($settings->_luceneClassDir.'/Lucene.php');
|
||||
else
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
|
||||
if(isset($_GET['create']) && $_GET['create'] == 1) {
|
||||
if(isset($_GET['confirm']) && $_GET['confirm'] == 1) {
|
||||
$index = SeedDMS_Lucene_Indexer::create($settings->_luceneDir);
|
||||
SeedDMS_Lucene_Indexer::init($settings->_stopWordsFile);
|
||||
$index = $indexconf['Indexer']::create($settings->_luceneDir);
|
||||
$indexconf['Indexer']::init($settings->_stopWordsFile);
|
||||
} else {
|
||||
header('Location: out.CreateIndex.php');
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
$index = SeedDMS_Lucene_Indexer::open($settings->_luceneDir);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if(!$index) {
|
||||
UI::exitError(getMLText("admin_tools"),getMLText("no_fulltextindex"));
|
||||
}
|
||||
SeedDMS_Lucene_Indexer::init($settings->_stopWordsFile);
|
||||
$indexconf['Indexer']::init($settings->_stopWordsFile);
|
||||
}
|
||||
|
||||
if (!isset($_GET["folderid"]) || !is_numeric($_GET["folderid"]) || intval($_GET["folderid"])<1) {
|
||||
|
@ -65,7 +60,7 @@ else {
|
|||
$folder = $dms->getFolder($folderid);
|
||||
|
||||
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
|
||||
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'index'=>$index, 'recreate'=>(isset($_GET['create']) && $_GET['create']==1), 'folder'=>$folder, 'converters'=>$settings->_converters['fulltext'], 'timeout'=>$settings->_cmdTimeout));
|
||||
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'index'=>$index, 'indexconf'=>$indexconf, 'recreate'=>(isset($_GET['create']) && $_GET['create']==1), 'folder'=>$folder, 'converters'=>$settings->_converters['fulltext'], 'timeout'=>$settings->_cmdTimeout));
|
||||
if($view) {
|
||||
$view->show();
|
||||
exit;
|
||||
|
|
|
@ -52,26 +52,46 @@ if(isset($settings->_extraPath))
|
|||
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
|
||||
|
||||
require_once("SeedDMS/Core.php");
|
||||
require_once("SeedDMS/Lucene.php");
|
||||
if($settings->_fullSearchEngine == 'sqlitefts') {
|
||||
$indexconf = array(
|
||||
'Indexer' => 'SeedDMS_SQLiteFTS_Indexer',
|
||||
'Search' => 'SeedDMS_SQLiteFTS_Search',
|
||||
'IndexedDocument' => 'SeedDMS_SQLiteFTS_IndexedDocument'
|
||||
);
|
||||
|
||||
function tree($dms, $index, $folder, $indent='') {
|
||||
require_once('SeedDMS/SQLiteFTS.php');
|
||||
} else {
|
||||
$indexconf = array(
|
||||
'Indexer' => 'SeedDMS_Lucene_Indexer',
|
||||
'Search' => 'SeedDMS_Lucene_Search',
|
||||
'IndexedDocument' => 'SeedDMS_Lucene_IndexedDocument'
|
||||
);
|
||||
|
||||
require_once('SeedDMS/Lucene.php');
|
||||
}
|
||||
|
||||
function tree($dms, $index, $indexconf, $folder, $indent='') { /* {{{ */
|
||||
global $settings;
|
||||
echo $indent."D ".$folder->getName()."\n";
|
||||
$subfolders = $folder->getSubFolders();
|
||||
foreach($subfolders as $subfolder) {
|
||||
tree($dms, $index, $subfolder, $indent.' ');
|
||||
tree($dms, $index, $indexconf, $subfolder, $indent.' ');
|
||||
}
|
||||
$documents = $folder->getDocuments();
|
||||
foreach($documents as $document) {
|
||||
echo $indent." ".$document->getId().":".$document->getName()." ";
|
||||
if(!($hits = $index->find('document_id:'.$document->getId()))) {
|
||||
$index->addDocument(new SeedDMS_Lucene_IndexedDocument($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null));
|
||||
echo " (Document added)\n";
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
if(!($hit = $lucenesearch->getDocument($document->getId()))) {
|
||||
try {
|
||||
$index->addDocument(new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, false));
|
||||
echo " (Document added)\n";
|
||||
} catch(Exception $e) {
|
||||
echo " (Timeout)\n";
|
||||
}
|
||||
} else {
|
||||
$hit = $hits[0];
|
||||
try {
|
||||
$created = (int) $hit->getDocument()->getFieldValue('created');
|
||||
} catch (Zend_Search_Lucene_Exception $e) {
|
||||
} catch (Exception $e) {
|
||||
$created = 0;
|
||||
}
|
||||
$content = $document->getLatestContent();
|
||||
|
@ -79,33 +99,42 @@ function tree($dms, $index, $folder, $indent='') {
|
|||
echo " (Document unchanged)\n";
|
||||
} else {
|
||||
if($index->delete($hit->id)) {
|
||||
$index->addDocument(new SeedDMS_Lucene_IndexedDocument($dms, $document, $settings->_converters['fulltext'] ? $settings->_converters['fulltext'] : null));
|
||||
echo " (Document updated)\n";
|
||||
try {
|
||||
$index->addDocument(new $indexconf['IndexedDocument']($dms, $document, isset($settings->_converters['fulltext']) ? $settings->_converters['fulltext'] : null, false));
|
||||
echo " (Document updated)\n";
|
||||
} catch(Exception $e) {
|
||||
echo " (Timeout)\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} /* }}} */
|
||||
|
||||
$db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase);
|
||||
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
|
||||
|
||||
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
|
||||
if(!$dms->checkVersion()) {
|
||||
echo "Database update needed.";
|
||||
exit;
|
||||
echo "Database update needed.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$dms->setRootFolderID($settings->_rootFolderID);
|
||||
|
||||
if($recreate)
|
||||
$index = Zend_Search_Lucene::create($settings->_luceneDir);
|
||||
$index = $indexconf['Indexer']::create($settings->_luceneDir);
|
||||
else
|
||||
$index = Zend_Search_Lucene::open($settings->_luceneDir);
|
||||
SeedDMS_Lucene_Indexer::init($settings->_stopWordsFile);
|
||||
$index = $indexconf['Indexer']::open($settings->_luceneDir);
|
||||
if(!$index) {
|
||||
echo "Could not create index.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$indexconf['Indexer']::init($settings->_stopWordsFile);
|
||||
|
||||
$folder = $dms->getFolder($settings->_rootFolderID);
|
||||
tree($dms, $index, $folder);
|
||||
tree($dms, $index, $indexconf, $folder);
|
||||
|
||||
$index->commit();
|
||||
$index->optimize();
|
||||
|
|
|
@ -31,26 +31,26 @@ require_once("class.Bootstrap.php");
|
|||
*/
|
||||
class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style {
|
||||
|
||||
function tree($dms, $index, $folder, $indent='') { /* {{{ */
|
||||
function tree($dms, $index, $indexconf, $folder, $indent='') { /* {{{ */
|
||||
set_time_limit(30);
|
||||
echo $indent."D ".htmlspecialchars($folder->getName())."\n";
|
||||
$subfolders = $folder->getSubFolders();
|
||||
foreach($subfolders as $subfolder) {
|
||||
$this->tree($dms, $index, $subfolder, $indent.' ');
|
||||
$this->tree($dms, $index, $indexconf, $subfolder, $indent.' ');
|
||||
}
|
||||
$documents = $folder->getDocuments();
|
||||
foreach($documents as $document) {
|
||||
echo $indent." ".$document->getId().":".htmlspecialchars($document->getName())." ";
|
||||
/* If the document wasn't indexed before then just add it */
|
||||
if(!($hits = $index->find('document_id:'.$document->getId()))) {
|
||||
$lucenesearch = new $indexconf['Search']($index);
|
||||
if(!($hit = $lucenesearch->getDocument($document->getId()))) {
|
||||
try {
|
||||
$index->addDocument(new SeedDMS_Lucene_IndexedDocument($dms, $document, $this->converters ? $this->converters : null, false, $this->timeout));
|
||||
$index->addDocument(new $indexconf['IndexedDocument']($dms, $document, $this->converters ? $this->converters : null, false, $this->timeout));
|
||||
echo "(document added)";
|
||||
} catch(Exception $e) {
|
||||
echo $indent."(adding document failed '".$e->getMessage()."')";
|
||||
}
|
||||
} else {
|
||||
$hit = $hits[0];
|
||||
/* Check if the attribute created is set or has a value older
|
||||
* than the lasted content. Documents without such an attribute
|
||||
* where added when a new document was added to the dms. In such
|
||||
|
@ -58,7 +58,7 @@ class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style {
|
|||
*/
|
||||
try {
|
||||
$created = (int) $hit->getDocument()->getFieldValue('created');
|
||||
} catch (Zend_Search_Lucene_Exception $e) {
|
||||
} catch (/* Zend_Search_Lucene_ */Exception $e) {
|
||||
$created = 0;
|
||||
}
|
||||
$content = $document->getLatestContent();
|
||||
|
@ -67,7 +67,7 @@ class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style {
|
|||
} else {
|
||||
$index->delete($hit->id);
|
||||
try {
|
||||
$index->addDocument(new SeedDMS_Lucene_IndexedDocument($dms, $document, $this->converters ? $this->converters : null, false, $this->timeout));
|
||||
$index->addDocument(new $indexconf['IndexedDocument']($dms, $document, $this->converters ? $this->converters : null, false, $this->timeout));
|
||||
echo $indent."(document updated)";
|
||||
} catch(Exception $e) {
|
||||
print_r($e);
|
||||
|
@ -83,6 +83,7 @@ class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style {
|
|||
$dms = $this->params['dms'];
|
||||
$user = $this->params['user'];
|
||||
$index = $this->params['index'];
|
||||
$indexconf = $this->params['indexconf'];
|
||||
$recreate = $this->params['recreate'];
|
||||
$folder = $this->params['folder'];
|
||||
$this->converters = $this->params['converters'];
|
||||
|
@ -95,7 +96,7 @@ class SeedDMS_View_Indexer extends SeedDMS_Bootstrap_Style {
|
|||
$this->contentHeading(getMLText("update_fulltext_index"));
|
||||
|
||||
echo "<pre>";
|
||||
$this->tree($dms, $index, $folder);
|
||||
$this->tree($dms, $index, $indexconf, $folder);
|
||||
echo "</pre>";
|
||||
|
||||
$index->commit();
|
||||
|
|
Loading…
Reference in New Issue
Block a user