ElasticSearch is a distributed lucene powered search indexing, this is a PHP client for it
-
Install composer.
curl -s http://getcomposer.org/installer | php
-
Create
composer.json
containing:{ "require" : { "nervetattoo/elasticsearch" : ">=2.0" } }
-
Run
./composer.phar install
-
Keep up-to-date:
./composer.phar update
<?php
require_once __DIR__ . '/vendor/autoload.php';
use \ElasticSearch\Client;
// The recommended way to go about things is to use an environment variable called ELASTICSEARCH_URL
$es = Client::connection();
// Alternatively you can use dsn string
$es = Client::connection('http://127.0.0.1:9200/myindex/mytype');
$es->index(array('title' => 'My cool document'), $id);
$es->get($id);
$es->search('title:cool');
<?php
$es->map(array(
'title' => array(
'type' => 'string',
'index' => 'analyzed'
)
));
<?php
$results = $es
->setIndex(array("one", "two"))
->setType(array("mytype", "other-type"))
->search('title:cool');
<?php
$es->search(array(
'query' => array(
'term' => array('title' => 'cool')
)
);
Using an array for configuration also works
<?php
$es = Client::connection(array(
'servers' => '127.0.0.1:9200',
'protocol' => 'http',
'index' => 'myindex',
'type' => 'mytype'
));
<?php
$document = array(
'title' => 'My routed document',
'user_id' => '42'
);
$es->index($document, $id, array('routing' => $document['user_id']));
$es->search('title:routed', array('routing' => '42'));
<?php
$document = array(
'title' => 'My bulked entry',
'user_id' => '43'
);
$es->beginBulk();
$es->index($document, $id, array('routing' => $document['user_id']));
$es->delete(2);
$es->delete(3);
$es->commitBulk();
$es->createBulk()
->delete(4)
->index($document, $id, 'myIndex', 'myType', array('parent' => $parentId));
->delete(5)
->delete(6)
->commit();