deblan.tv/vendor/trinity/src/Trinity/.svn/pristine/1e/1e7efbc44f575de0f836bc4e618d7b8fee8a0a8e.svn-base
2015-03-02 21:57:49 +01:00

58 lines
1.8 KiB
Plaintext

<?php
namespace Trinity\Bundle\SearchBundle\EventListener;
use Ivory\LuceneSearchBundle\Model\Field;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Trinity\Bundle\ContentManagerBundle\Model\Page;
use Trinity\Bundle\SearchBundle\Event\LuceneEvent;
use Trinity\Bundle\SearchBundle\TrinitySearchEvents;
use ZendSearch\Lucene\Document;
class LuceneSubscriber implements EventSubscriberInterface
{
protected $container;
public function __construct(Container $container)
{
$this->container = $container;
}
public static function getSubscribedEvents()
{
return array(
TrinitySearchEvents::LUCENE_ADD_INDEX => 'addDocument',
TrinitySearchEvents::LUCENE_UPDATE_INDEX => 'updateDocument',
TrinitySearchEvents::LUCENE_REMOVE_INDEX => 'removeDocument'
);
}
public function addDocument(LuceneEvent $event)
{
$index = $this->container->get('ivory_lucene_search')->getIndex($event->getIndex());
$document = $event->getObject()->getLuceneDocument($event->getIndex());
if ($document) {
$index->addDocument($document);
$index->commit();
$index->optimize();
}
}
public function removeDocument(LuceneEvent $event)
{
$index = $this->container->get('ivory_lucene_search')->getIndex($event->getIndex());
$hits = $index->find('pk:'.$event->getObject()->getIndexKey());
foreach ($hits as $hit) {
$index->delete($hit->id);
$index->commit();
}
$index->optimize();
}
public function updateDocument(LuceneEvent $event)
{
$this->removeDocument($event);
$this->addDocument($event);
}
}