diff --git a/src/SilverStripe/Elastica/ReindexTask.php b/src/SilverStripe/Elastica/ReindexTask.php index 65588b4..ee00043 100644 --- a/src/SilverStripe/Elastica/ReindexTask.php +++ b/src/SilverStripe/Elastica/ReindexTask.php @@ -25,8 +25,8 @@ public function run($request) { print(\Director::is_cli() ? "$content\n" : "
$content
"); }; - $message('Defining the mappings'); - $this->service->define(); + // $message('Defining the mappings'); + // $this->service->define(); $message('Refreshing the index'); $this->service->refresh(); diff --git a/src/SilverStripe/Elastica/ResultList.php b/src/SilverStripe/Elastica/ResultList.php index b1f6956..00e74aa 100644 --- a/src/SilverStripe/Elastica/ResultList.php +++ b/src/SilverStripe/Elastica/ResultList.php @@ -12,6 +12,7 @@ class ResultList extends \ViewableData implements \SS_Limitable, \SS_List { private $index; private $query; + private $search = null; public function __construct(Index $index, Query $query) { $this->index = $index; @@ -36,11 +37,22 @@ public function getQuery() { return $this->query; } + /** + * @return Elastica search result (cached) + */ + public function getSearch() { + if(!$this->search) { + $this->search = $this->index->search($this->query); + } + + return $this->search; + } + /** * @return array */ public function getResults() { - return $this->index->search($this->query)->getResults(); + return $this->getSearch()->getResults(); } public function getIterator() { @@ -145,6 +157,10 @@ public function count() { return count($this->toArray()); } + public function getTotalHits() { + return $this->getSearch()->getTotalHits(); + } + /** * @ignore */ diff --git a/src/SilverStripe/Elastica/Searchable.php b/src/SilverStripe/Elastica/Searchable.php index d3abdba..49fc488 100644 --- a/src/SilverStripe/Elastica/Searchable.php +++ b/src/SilverStripe/Elastica/Searchable.php @@ -95,7 +95,13 @@ public function getElasticaDocument() { * Updates the record in the search index. */ public function onAfterWrite() { - $this->service->index($this->owner); + if($this->owner->ShowInSearch && $this->owner->isPublished()) { + $this->service->index($this->owner); + } else { + try { + $this->service->remove($this->owner); + } catch (\Elastica\Exception\NotFoundException $e) { } + } } /**