27/05/2016 - ELASTICSEARCH, SYMFONY
Elasticsearch indexini, çoğu zaman veritabanından gelen veriler ile $ app/console fos:elastica:populate
komutunu çalıştırarak doldururuz. Eğer veritabanı yoksa ve de veriler başka bir kaynaktan geliyorsa, aynı işlemi olduğu gibi yapabiliriz. Bunun için de kendi yazdığımız provider servis ile yaparız. Bu örnek FOSElasticaBundle kullanıyor.
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
indexes:
post_index:
client: default
index_name: post_%kernel.environment%
types:
post:
mappings: ~
persistence:
driver: orm
model: ~
finder: ~
provider:
service: application_search.util.post_provider
listener: ~
namespace Application\SearchBundle\Util;
use Closure;
use Elastica\Document;
use Elastica\Type;
use FOS\ElasticaBundle\Provider\ProviderInterface;
class PostProvider implements ProviderInterface
{
protected $postType;
public function __construct(Type $postType)
{
$this->postType = $postType;
}
public function populate(Closure $loggerClosure = null, array $options = [])
{
$i = 1;
foreach ($this->getData() as $team) {
$document = new Document();
$document->setId($i++);
$document->setData($team);
$this->postType->addDocuments([$document]);
}
}
private function getData()
{
$teams[] = ['name' => 'Fenerbahce'];
$teams[] = ['name' => 'Arsenal'];
$teams[] = ['name' => 'Juventus'];
return $teams;
}
}
services:
application_search.util.post_provider:
class: Application\SearchBundle\Util\PostProvider
arguments:
- @fos_elastica.index.post_index.post
tags:
- { name: fos_elastica.provider, index: post_index, type: post }
$ app/console fos:elastica:populate
Resetting post_index
Refreshing post_index
Refreshing post_index
curl -XPOST "http://127.0.0.1:9200/_search?post_dev" -d'
{
"query": {
"bool": {
"must": [
{
"match_all": []
}
]
}
}
}'
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 15,
"successful": 15,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "post_dev",
"_type": "post",
"_id": "1",
"_score": 1,
"_source": {
"name": "Fenerbahce"
}
},
{
"_index": "post_dev",
"_type": "post",
"_id": "2",
"_score": 1,
"_source": {
"name": "Arsenal"
}
},
{
"_index": "post_dev",
"_type": "post",
"_id": "3",
"_score": 1,
"_source": {
"name": "Juventus"
}
}
]
}
}