New Full Text Search

This commit is contained in:
2019-12-08 10:50:09 +01:00
parent c4d77d38b3
commit 0dac58742d
8 changed files with 98 additions and 265 deletions

View File

@@ -41,7 +41,6 @@ class Databap extends PhpObject
const IMG_TABLE = 'images';
const DOC_TABLE = 'docs';
const FILE_TABLE = 'files';
const SEARCH_TABLE = 'searchs';
const TABL_TABLE = 'tables';
const TITLE_LEN = 200;
@@ -183,7 +182,6 @@ class Databap extends PhpObject
//Objects
private $oMySql;
private $oSearchEngine;
private $oClassManagement;
private $oAuth;
@@ -226,9 +224,6 @@ class Databap extends PhpObject
//Passing settings down to mySQL
$this->oMySql = new MySqlManager(Settings::DB_SERVER, Settings::DB_LOGIN, Settings::DB_PASS, Settings::DB_NAME, self::getSqlOptions(), Settings::DB_ENC);
if($this->oMySql->sDbState == MySqlManager::DB_NO_DATA && Settings::DEBUG==true) $this->install();
//Init Search Engine
$this->oSearchEngine = new SearchEngine($this->oMySql);
}
public static function getSqlOptions()
@@ -251,7 +246,6 @@ class Databap extends PhpObject
self::IMG_TABLE => array(MySqlManager::getId(self::PROC_TABLE), MySqlManager::getId(self::STEP_TABLE), 'description', 'file_name'),
self::DOC_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'refer_id'),
self::FILE_TABLE => array('id_item', 'type', 'description', 'hash', 'extension'),
self::SEARCH_TABLE => array('id_item', 'refer_id', 'type', 'keywords'),
self::ART_TABLE => array('title', 'link', 'date', 'first_name', 'last_name', 'email'),
self::TABL_TABLE => array(MySqlManager::getId(self::USER_TABLE), 'title', 'description', 'system', 'keywords', 'refer_id')
);
@@ -292,10 +286,16 @@ class Databap extends PhpObject
);
$asOptions['constraints'] = array
(
self::USER_TABLE => "UNIQUE KEY `user_first_and_last_name` (`first_name`, `last_name`)",
self::URL_TABLE => "UNIQUE KEY `uni_phrase` (`phrase`)",
self::MSG_TABLE => "INDEX(`date`)",
self::ART_TABLE => "INDEX(`title`)"
self::USER_TABLE => "UNIQUE KEY `user_first_and_last_name` (`first_name`, `last_name`)",
self::URL_TABLE => "UNIQUE KEY `uni_phrase` (`phrase`)",
self::MSG_TABLE => "INDEX(`date`)",
self::ART_TABLE => "INDEX(`title`), FULLTEXT(`title`)",
self::CODE_TABLE => "FULLTEXT(`".MySqlManager::getText(self::CODE_TABLE)."`, `description`)",
self::PROC_TABLE => "FULLTEXT(`title`, `description`)",
self::STEP_TABLE => "FULLTEXT(`description`)",
self::DOC_TABLE => "FULLTEXT(`title`, `description`)",
self::FILE_TABLE => "FULLTEXT(`description`)",
self::TABL_TABLE => "FULLTEXT(`title`, `description`, `keywords`)"
);
$asOptions['cascading_delete'] = array
(
@@ -629,7 +629,6 @@ class Databap extends PhpObject
{
$iArticleId = $this->oMySql->insertRow(self::ART_TABLE, $asArticle);
$this->addMessage($iArticleId, self::MESSAGE_ARTICLE, self::DEFAULT_CHAN_ID);
$this->oSearchEngine->buildIndex($iArticleId, self::ART_TYPE);
$sResult = 'ADDED';
}
else $sResult = 'OK';
@@ -888,16 +887,6 @@ class Databap extends PhpObject
return $bExt?$this->getJsonPostResult(true, ''):$iUserId;
}
public function buildCompleteIndex()
{
$this->oMySql->emptyTable(self::SEARCH_TABLE);
foreach($this->getTypeInfo('table') as $sSearchType=>$sSearchTable)
{
$asItemIds = $this->oMySql->selectRows(array('select'=>MySqlManager::getId($sSearchTable), 'from'=>$sSearchTable));
foreach($asItemIds as $iItemId) $this->oSearchEngine->buildIndex($iItemId, $sSearchType);
}
}
//insert new code / version
public function addCode($asData)
{
@@ -924,9 +913,6 @@ class Databap extends PhpObject
//Add message
$this->addMessage($iCodeId, self::MESSAGE_ADD_CODE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iCodeId, self::CODE_TYPE);
return $iCodeId;
}
@@ -944,9 +930,6 @@ class Databap extends PhpObject
//Add message
$this->addMessage($iCodeId, self::MESSAGE_EDIT_CODE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iCodeId, self::CODE_TYPE);
return $iCodeId;
}
@@ -984,9 +967,6 @@ class Databap extends PhpObject
{
$this->addMessage($iNewProcId, self::MESSAGE_EDIT_PROC, self::DEFAULT_CHAN_ID);
}
//Add record in Search Table
$this->oSearchEngine->buildIndex($iNewProcId, self::PROC_TYPE);
}
else
{
@@ -1065,9 +1045,6 @@ class Databap extends PhpObject
//Add Message in chat
$this->addMessage($iDbDocId, $bCreation?self::MESSAGE_ADD_DOC:self::MESSAGE_EDIT_DOC, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iDbDocId, self::DOC_TYPE);
//TODO add error handling
return $this->getJsonPostResult(true, '', array('doc_id'=>$iDbDocId));
}
@@ -1133,9 +1110,6 @@ class Databap extends PhpObject
//Add Message in chat
$this->addMessage($iDbTableId, $bCreation?self::MESSAGE_ADD_TABLE:self::MESSAGE_EDIT_TABLE, self::DEFAULT_CHAN_ID);
//Add record in Search Table
$this->oSearchEngine->buildIndex($iDbTableId, self::TABLE_TYPE);
}
}
return $this->getJsonPostResult($iDbTableId>0, $sDesc, array('id'=>$iDbTableId, 'name'=>$sTitle));
@@ -2859,8 +2833,11 @@ class Databap extends PhpObject
return $sChanSafeName;
}
public function getResults($sSearchWords)
public function search($sSearchWords)
{
//Init Search Engine
$this->oSearchEngine = new SearchEngine($this->oMySql);
$this->oSearchEngine->setWords($sSearchWords);
$asResults = $this->oSearchEngine->getResults();