diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2012-05-07 20:47:01 +0200 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2012-05-07 20:47:01 +0200 |
| commit | 7c5ea8dded583601f29c7ea9bcb507ecbdd854d6 (patch) | |
| tree | 53426dba320005d5f058250e20e239d454080d76 /src/phorkie/Database/Adapter/Elasticsearch/Indexer.php | |
| parent | 3c83676016bce1727f0046f4aad7865be8a71fd4 (diff) | |
| download | phorkie-7c5ea8dded583601f29c7ea9bcb507ecbdd854d6.tar.gz phorkie-7c5ea8dded583601f29c7ea9bcb507ecbdd854d6.zip | |
move elasticsearch code in one folder
Diffstat (limited to 'src/phorkie/Database/Adapter/Elasticsearch/Indexer.php')
| -rw-r--r-- | src/phorkie/Database/Adapter/Elasticsearch/Indexer.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php new file mode 100644 index 0000000..d9d1032 --- /dev/null +++ b/src/phorkie/Database/Adapter/Elasticsearch/Indexer.php @@ -0,0 +1,121 @@ +<?php +namespace phorkie; + +class Database_Adapter_Elasticsearch_Indexer +{ + public function __construct() + { + $this->searchInstance = $GLOBALS['phorkie']['cfg']['elasticsearch']; + } + + + public function addRepo(Repository $repo, $crdate = null) + { + if ($crdate == null) { + $crdate = time(); + } + $this->updateRepo($repo, $crdate); + } + + public function updateRepo(Repository $repo, $crdate = null) + { + //add repository + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'repo/' . $repo->id, + \HTTP_Request2::METHOD_PUT + ); + $repoData = array( + 'id' => $repo->id, + 'description' => $repo->getDescription(), + 'tstamp' => gmdate('c', time()), + ); + if ($crdate !== null) { + $repoData['crdate'] = gmdate('c', $crdate); + } + $r->setBody(json_encode((object)$repoData)); + $r->send(); + + //add files + //clean up before adding files; files might have been deleted + $this->deleteRepoFiles($repo); + + foreach ($repo->getFiles() as $file) { + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'file/?parent=' . $repo->id, + \HTTP_Request2::METHOD_POST + ); + $r->setBody( + json_encode( + (object)array( + 'name' => $file->getFilename(), + 'extension' => $file->getExt(), + 'content' => $file->isText() ? $file->getContent() : '', + ) + ) + ); + $r->send(); + } + } + + public function deleteAllRepos() + { + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'repo/_query', + \HTTP_Request2::METHOD_DELETE + ); + $r->setBody( + json_encode( + (object)array( + 'match_all' => (object)array() + ) + ) + ); + $r->send(); + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'file/_query', + \HTTP_Request2::METHOD_DELETE + ); + $r->setBody( + json_encode( + (object)array( + 'match_all' => (object)array() + ) + ) + ); + $r->send(); + } + + public function deleteRepo(Repository $repo) + { + //delete repository from index + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'repo/' . $repo->id, + \HTTP_Request2::METHOD_DELETE + ); + $r->send(); + + $this->deleteRepoFiles($repo); + } + + protected function deleteRepoFiles(Repository $repo) + { + //delete files of that repository + $r = new Database_Adapter_Elasticsearch_HTTPRequest( + $this->searchInstance . 'file/_query', + \HTTP_Request2::METHOD_DELETE + ); + $r->setBody( + json_encode( + (object)array( + 'field' => (object)array( + '_parent' => $repo->id + ) + ) + ) + ); + $r->send(); + } + +} + +?> |
