diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/phorkie/Database/Adapter/Elasticsearch/Indexer.php | 37 | ||||
| -rw-r--r-- | src/phorkie/Database/Adapter/Elasticsearch/Search.php | 5 | ||||
| -rw-r--r-- | src/phorkie/Database/Adapter/Elasticsearch/Setup.php | 6 | ||||
| -rw-r--r-- | src/phorkie/Database/Adapter/Null/Indexer.php | 4 | ||||
| -rw-r--r-- | src/phorkie/Database/IIndexer.php | 4 | ||||
| -rw-r--r-- | src/phorkie/Database/ISearch.php | 3 |
6 files changed, 49 insertions, 10 deletions
diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php index cf50bbe..e93cfa7 100644 --- a/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php +++ b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php @@ -9,15 +9,18 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer } - public function addRepo(Repository $repo, $crdate = null) + public function addRepo(Repository $repo, $crdate = null, $modate = null) { if ($crdate == null) { $crdate = time(); } - $this->updateRepo($repo, $crdate); + if ($modate == null) { + $modate = time(); + } + $this->updateRepo($repo, $crdate, $modate); } - public function updateRepo(Repository $repo, $crdate = null) + public function updateRepo(Repository $repo, $crdate = null, $modate = null) { //add repository $r = new Database_Adapter_Elasticsearch_HTTPRequest( @@ -35,6 +38,12 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer if ($crdate !== null) { $repoData['crdate'] = gmdate('c', $crdate); } + if ($modate == null) { + $modate = $this->getMoDate($repo); + } + if ($modate !== null) { + $repoData['modate'] = gmdate('c', $modate); + } $r->setBody(json_encode((object)$repoData)); $r->send(); @@ -83,6 +92,28 @@ class Database_Adapter_Elasticsearch_Indexer implements Database_IIndexer return strtotime($json->_source->crdate); } + /** + * When updating the repository, we don't have a modification date. + * We need to keep it, but elasticsearch does not have a simple way + * to update some fields only (without using a custom script). + * + * @return integer Unix timestamp + */ + protected function getMoDate(Repository $repo) + { + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'repo/' . $repo->id, + \HTTP_Request2::METHOD_GET + ); + $json = json_decode($r->send()->getBody()); + + if (!isset($json->_source->modate)) { + return null; + } + + return strtotime($json->_source->modate); + } + public function deleteAllRepos() { $r = new Database_Adapter_Elasticsearch_HTTPRequest( diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Search.php b/src/phorkie/Database/Adapter/Elasticsearch/Search.php index e960e04..ddbc13b 100644 --- a/src/phorkie/Database/Adapter/Elasticsearch/Search.php +++ b/src/phorkie/Database/Adapter/Elasticsearch/Search.php @@ -6,6 +6,7 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch protected static $sortMap = array( 'id' => array('id', 'asc'), 'crdate' => array('crdate', 'desc'), + 'modate' => array('modate', 'desc'), 'tstamp' => array('tstamp', 'desc'), ); @@ -22,7 +23,8 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch * @param string $sort Sort order. Allowed values: * - id - repository id * - crdate - creation date - * - tstamp - modification date + * - modate - modification date + * - tstamp - last index date * * @return Search_Result Search result object */ @@ -64,6 +66,7 @@ class Database_Adapter_Elasticsearch_Search implements Database_ISearch $r = new Repository(); $r->loadById($hit->_source->id); $r->crdate = strtotime($hit->_source->crdate); + $r->modate = strtotime($hit->_source->modate); $sres->repos[] = $r; } diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Setup.php b/src/phorkie/Database/Adapter/Elasticsearch/Setup.php index 0df2874..bb76d54 100644 --- a/src/phorkie/Database/Adapter/Elasticsearch/Setup.php +++ b/src/phorkie/Database/Adapter/Elasticsearch/Setup.php @@ -59,9 +59,13 @@ class Database_Adapter_Elasticsearch_Setup implements Database_ISetup //creation date 'type' => 'date', ), - 'tstamp' => (object)array( + 'modate' => (object)array( //modification date 'type' => 'date', + ), + 'tstamp' => (object)array( + //last indexed date + 'type' => 'date', ) ) ) diff --git a/src/phorkie/Database/Adapter/Null/Indexer.php b/src/phorkie/Database/Adapter/Null/Indexer.php index 3b0c990..4ad63f1 100644 --- a/src/phorkie/Database/Adapter/Null/Indexer.php +++ b/src/phorkie/Database/Adapter/Null/Indexer.php @@ -3,11 +3,11 @@ namespace phorkie; class Database_Adapter_Null_Indexer { - public function addRepo(Repository $repo, $crdate = null) + public function addRepo(Repository $repo, $crdate = null, $modate = null) { } - public function updateRepo(Repository $repo, $crdate = null) + public function updateRepo(Repository $repo, $crdate = null, $modate = null) { } diff --git a/src/phorkie/Database/IIndexer.php b/src/phorkie/Database/IIndexer.php index 61b8a87..232e1ee 100644 --- a/src/phorkie/Database/IIndexer.php +++ b/src/phorkie/Database/IIndexer.php @@ -3,8 +3,8 @@ namespace phorkie; interface Database_IIndexer { - public function addRepo(Repository $repo, $crdate = null); - public function updateRepo(Repository $repo, $crdate = null); + public function addRepo(Repository $repo, $crdate = null, $modate = null); + public function updateRepo(Repository $repo, $crdate = null, $modate = null); public function deleteAllRepos(); public function deleteRepo(Repository $repo); } diff --git a/src/phorkie/Database/ISearch.php b/src/phorkie/Database/ISearch.php index c33867b..f67dec6 100644 --- a/src/phorkie/Database/ISearch.php +++ b/src/phorkie/Database/ISearch.php @@ -13,7 +13,8 @@ interface Database_ISearch * @param string $sort Sort order. Allowed values: * - id - repository id * - crdate - creation date - * - tstamp - modification date + * - modate - modification date + * - tstamp - last index date * * @return Search_Result Search result object */ |
