1. Go to this page and download the library: Download doctrine/search library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
doctrine / search example snippets
$config = new Doctrine\Search\Configuration();
$config->setMetadataCacheImpl(new Doctrine\Common\Cache\ArrayCache());
$config->setEntitySerializer(
new Doctrine\Search\Serializer\JMSSerializer(
JMS\Serializer\SerializationContext::create()->setGroups('search')
)
);
$eventManager = new Doctrine\Search\EventManager();
$eventManager->addListener($listener);
$searchManager = new Doctrine\Search\SearchManager(
$config,
new Doctrine\Search\ElasticSearch\Client(
new Elastica\Client(array(
array('host' => 'localhost', 'port' => '9200')
)
),
$eventManager
);
namespace Entities;
use Doctrine\Search\Mapping\Annotations as MAP;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @MAP\ElasticSearchable(index="indexname", type="post", source=true)
*/
class Post
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @MAP\ElasticField(type="integer", type="string",
namespace Entities\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Entities\Behaviour\SearchableEntityInterface;
class SearchableListener implements
{
protected function getSearchManager() {
return $this->getDatabaseConnection('elasticsearch');
}
public function postPersist(LifecycleEventArgs $oArgs) {
$oEntity = $oArgs->getEntity();
if($oEntity instanceof SearchableEntityInterface) {
$this->getSearchManager()->persist($oEntity);
}
}
public function postRemove(LifecycleEventArgs $oArgs) {
$oEntity = $oArgs->getEntity();
if($oEntity instanceof SearchableEntityInterface) {
$this->getSearchManager()->remove($oEntity);
}
}
}
...
use Entities\Behaviour\SearchableEntityInterface
class Post implements SearchableEntityInterface
{
...
public function toArray() {
return array(
'id' => $this->id,
'title' => $this->title,
'content' => $this->content
...
);
}
}
...
use JMS\Serializer\Annotation as JMS;
use Entities\Behaviour\SearchableEntityInterface
/**
* @ORM\Entity
* @MAP\ElasticSearchable(index="indexname", type="post", source=true)
* @JMS\ExclusionPolicy("all")
*/
class Post implements SearchableEntityInterface
{
...
/**
* @ORM\Column(type="string")
* @MAP\ElasticField(type="string",