adjusted elasticsearch extension to version 1.0 of ES

breaking changes.
This commit is contained in:
Carsten Brandt
2014-05-06 18:14:32 +02:00
parent 76b3d89d83
commit 676b366928
14 changed files with 354 additions and 236 deletions

View File

@@ -14,6 +14,8 @@ use yii\elasticsearch\Command;
*/
class OrderItem extends ActiveRecord
{
public $total;
public function attributes()
{
return ['order_id', 'item_id', 'quantity', 'subtotal'];

View File

@@ -151,8 +151,8 @@ class ActiveRecordTest extends ElasticSearchTestCase
'name' => 'user2',
'address' => 'address2',
'status' => 1,
'_score' => 1.0
], $customer);
// '_score' => 1.0
], $customer['_source']);
}
public function testSearch()
@@ -174,21 +174,21 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertEquals(3, $result['total']);
$customers = $result['hits'];
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]);
$this->assertArrayHasKey('name', $customers[0]);
$this->assertArrayHasKey('email', $customers[0]);
$this->assertArrayHasKey('address', $customers[0]);
$this->assertArrayHasKey('status', $customers[0]);
$this->assertArrayHasKey('id', $customers[1]);
$this->assertArrayHasKey('name', $customers[1]);
$this->assertArrayHasKey('email', $customers[1]);
$this->assertArrayHasKey('address', $customers[1]);
$this->assertArrayHasKey('status', $customers[1]);
$this->assertArrayHasKey('id', $customers[2]);
$this->assertArrayHasKey('name', $customers[2]);
$this->assertArrayHasKey('email', $customers[2]);
$this->assertArrayHasKey('address', $customers[2]);
$this->assertArrayHasKey('status', $customers[2]);
$this->assertArrayHasKey('id', $customers[0]['_source']);
$this->assertArrayHasKey('name', $customers[0]['_source']);
$this->assertArrayHasKey('email', $customers[0]['_source']);
$this->assertArrayHasKey('address', $customers[0]['_source']);
$this->assertArrayHasKey('status', $customers[0]['_source']);
$this->assertArrayHasKey('id', $customers[1]['_source']);
$this->assertArrayHasKey('name', $customers[1]['_source']);
$this->assertArrayHasKey('email', $customers[1]['_source']);
$this->assertArrayHasKey('address', $customers[1]['_source']);
$this->assertArrayHasKey('status', $customers[1]['_source']);
$this->assertArrayHasKey('id', $customers[2]['_source']);
$this->assertArrayHasKey('name', $customers[2]['_source']);
$this->assertArrayHasKey('email', $customers[2]['_source']);
$this->assertArrayHasKey('address', $customers[2]['_source']);
$this->assertArrayHasKey('status', $customers[2]['_source']);
// TODO test asArray() + fields() + indexBy()
@@ -387,35 +387,67 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertEquals(2, count($customers));
}
public function testScriptFields()
{
$orderItems = OrderItem::find()->fields(['quantity', 'subtotal', 'total' => ['script' => "doc['quantity'].value * doc['subtotal'].value"]])->all();
foreach($orderItems as $item) {
$this->assertEquals($item->subtotal * $item->quantity, $item->total);
}
}
public function testFindAsArrayFields()
{
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers = Customer::find()->asArray()->fields(['id', 'name'])->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]);
$this->assertArrayHasKey('name', $customers[0]);
$this->assertArrayNotHasKey('email', $customers[0]);
$this->assertArrayNotHasKey('address', $customers[0]);
$this->assertArrayNotHasKey('status', $customers[0]);
$this->assertArrayHasKey('id', $customers[1]);
$this->assertArrayHasKey('name', $customers[1]);
$this->assertArrayNotHasKey('email', $customers[1]);
$this->assertArrayNotHasKey('address', $customers[1]);
$this->assertArrayNotHasKey('status', $customers[1]);
$this->assertArrayHasKey('id', $customers[2]);
$this->assertArrayHasKey('name', $customers[2]);
$this->assertArrayNotHasKey('email', $customers[2]);
$this->assertArrayNotHasKey('address', $customers[2]);
$this->assertArrayNotHasKey('status', $customers[2]);
$this->assertArrayHasKey('id', $customers[0]['fields']);
$this->assertArrayHasKey('name', $customers[0]['fields']);
$this->assertArrayNotHasKey('email', $customers[0]['fields']);
$this->assertArrayNotHasKey('address', $customers[0]['fields']);
$this->assertArrayNotHasKey('status', $customers[0]['fields']);
$this->assertArrayHasKey('id', $customers[1]['fields']);
$this->assertArrayHasKey('name', $customers[1]['fields']);
$this->assertArrayNotHasKey('email', $customers[1]['fields']);
$this->assertArrayNotHasKey('address', $customers[1]['fields']);
$this->assertArrayNotHasKey('status', $customers[1]['fields']);
$this->assertArrayHasKey('id', $customers[2]['fields']);
$this->assertArrayHasKey('name', $customers[2]['fields']);
$this->assertArrayNotHasKey('email', $customers[2]['fields']);
$this->assertArrayNotHasKey('address', $customers[2]['fields']);
$this->assertArrayNotHasKey('status', $customers[2]['fields']);
}
public function testFindIndexByFields()
public function testFindAsArraySourceFilter()
{
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers = Customer::find()->asArray()->source(['id', 'name'])->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]['_source']);
$this->assertArrayHasKey('name', $customers[0]['_source']);
$this->assertArrayNotHasKey('email', $customers[0]['_source']);
$this->assertArrayNotHasKey('address', $customers[0]['_source']);
$this->assertArrayNotHasKey('status', $customers[0]['_source']);
$this->assertArrayHasKey('id', $customers[1]['_source']);
$this->assertArrayHasKey('name', $customers[1]['_source']);
$this->assertArrayNotHasKey('email', $customers[1]['_source']);
$this->assertArrayNotHasKey('address', $customers[1]['_source']);
$this->assertArrayNotHasKey('status', $customers[1]['_source']);
$this->assertArrayHasKey('id', $customers[2]['_source']);
$this->assertArrayHasKey('name', $customers[2]['_source']);
$this->assertArrayNotHasKey('email', $customers[2]['_source']);
$this->assertArrayNotHasKey('address', $customers[2]['_source']);
$this->assertArrayNotHasKey('status', $customers[2]['_source']);
}
public function testFindIndexBySource()
{
$customerClass = $this->getCustomerClass();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers = Customer::find()->indexBy('name')->fields('id', 'name')->all();
$customers = Customer::find()->indexBy('name')->source('id', 'name')->all();
$this->assertEquals(3, count($customers));
$this->assertTrue($customers['user1'] instanceof $customerClass);
$this->assertTrue($customers['user2'] instanceof $customerClass);
@@ -467,42 +499,89 @@ class ActiveRecordTest extends ElasticSearchTestCase
// indexBy + asArray
$customers = Customer::find()->indexBy('name')->asArray()->fields('id', 'name')->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers['user1']);
$this->assertArrayHasKey('name', $customers['user1']);
$this->assertArrayNotHasKey('email', $customers['user1']);
$this->assertArrayNotHasKey('address', $customers['user1']);
$this->assertArrayNotHasKey('status', $customers['user1']);
$this->assertArrayHasKey('id', $customers['user2']);
$this->assertArrayHasKey('name', $customers['user2']);
$this->assertArrayNotHasKey('email', $customers['user2']);
$this->assertArrayNotHasKey('address', $customers['user2']);
$this->assertArrayNotHasKey('status', $customers['user2']);
$this->assertArrayHasKey('id', $customers['user3']);
$this->assertArrayHasKey('name', $customers['user3']);
$this->assertArrayNotHasKey('email', $customers['user3']);
$this->assertArrayNotHasKey('address', $customers['user3']);
$this->assertArrayNotHasKey('status', $customers['user3']);
$this->assertArrayHasKey('id', $customers['user1']['fields']);
$this->assertArrayHasKey('name', $customers['user1']['fields']);
$this->assertArrayNotHasKey('email', $customers['user1']['fields']);
$this->assertArrayNotHasKey('address', $customers['user1']['fields']);
$this->assertArrayNotHasKey('status', $customers['user1']['fields']);
$this->assertArrayHasKey('id', $customers['user2']['fields']);
$this->assertArrayHasKey('name', $customers['user2']['fields']);
$this->assertArrayNotHasKey('email', $customers['user2']['fields']);
$this->assertArrayNotHasKey('address', $customers['user2']['fields']);
$this->assertArrayNotHasKey('status', $customers['user2']['fields']);
$this->assertArrayHasKey('id', $customers['user3']['fields']);
$this->assertArrayHasKey('name', $customers['user3']['fields']);
$this->assertArrayNotHasKey('email', $customers['user3']['fields']);
$this->assertArrayNotHasKey('address', $customers['user3']['fields']);
$this->assertArrayNotHasKey('status', $customers['user3']['fields']);
// indexBy callable + asArray
$customers = Customer::find()->indexBy(function ($customer) {
return $customer['id'] . '-' . $customer['name'];
return reset($customer['fields']['id']) . '-' . reset($customer['fields']['name']);
})->asArray()->fields('id', 'name')->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers['1-user1']);
$this->assertArrayHasKey('name', $customers['1-user1']);
$this->assertArrayNotHasKey('email', $customers['1-user1']);
$this->assertArrayNotHasKey('address', $customers['1-user1']);
$this->assertArrayNotHasKey('status', $customers['1-user1']);
$this->assertArrayHasKey('id', $customers['2-user2']);
$this->assertArrayHasKey('name', $customers['2-user2']);
$this->assertArrayNotHasKey('email', $customers['2-user2']);
$this->assertArrayNotHasKey('address', $customers['2-user2']);
$this->assertArrayNotHasKey('status', $customers['2-user2']);
$this->assertArrayHasKey('id', $customers['3-user3']);
$this->assertArrayHasKey('name', $customers['3-user3']);
$this->assertArrayNotHasKey('email', $customers['3-user3']);
$this->assertArrayNotHasKey('address', $customers['3-user3']);
$this->assertArrayNotHasKey('status', $customers['3-user3']);
$this->assertArrayHasKey('id', $customers['1-user1']['fields']);
$this->assertArrayHasKey('name', $customers['1-user1']['fields']);
$this->assertArrayNotHasKey('email', $customers['1-user1']['fields']);
$this->assertArrayNotHasKey('address', $customers['1-user1']['fields']);
$this->assertArrayNotHasKey('status', $customers['1-user1']['fields']);
$this->assertArrayHasKey('id', $customers['2-user2']['fields']);
$this->assertArrayHasKey('name', $customers['2-user2']['fields']);
$this->assertArrayNotHasKey('email', $customers['2-user2']['fields']);
$this->assertArrayNotHasKey('address', $customers['2-user2']['fields']);
$this->assertArrayNotHasKey('status', $customers['2-user2']['fields']);
$this->assertArrayHasKey('id', $customers['3-user3']['fields']);
$this->assertArrayHasKey('name', $customers['3-user3']['fields']);
$this->assertArrayNotHasKey('email', $customers['3-user3']['fields']);
$this->assertArrayNotHasKey('address', $customers['3-user3']['fields']);
$this->assertArrayNotHasKey('status', $customers['3-user3']['fields']);
}
public function testFindIndexByAsArray()
{
/** @var \yii\db\ActiveRecordInterface $customerClass */
$customerClass = $this->getCustomerClass();
/** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray
$customers = $customerClass::find()->asArray()->indexBy('name')->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers['user1']['_source']);
$this->assertArrayHasKey('name', $customers['user1']['_source']);
$this->assertArrayHasKey('email', $customers['user1']['_source']);
$this->assertArrayHasKey('address', $customers['user1']['_source']);
$this->assertArrayHasKey('status', $customers['user1']['_source']);
$this->assertArrayHasKey('id', $customers['user2']['_source']);
$this->assertArrayHasKey('name', $customers['user2']['_source']);
$this->assertArrayHasKey('email', $customers['user2']['_source']);
$this->assertArrayHasKey('address', $customers['user2']['_source']);
$this->assertArrayHasKey('status', $customers['user2']['_source']);
$this->assertArrayHasKey('id', $customers['user3']['_source']);
$this->assertArrayHasKey('name', $customers['user3']['_source']);
$this->assertArrayHasKey('email', $customers['user3']['_source']);
$this->assertArrayHasKey('address', $customers['user3']['_source']);
$this->assertArrayHasKey('status', $customers['user3']['_source']);
// indexBy callable + asArray
$customers = $customerClass::find()->indexBy(function ($customer) {
return $customer['_source']['id'] . '-' . $customer['_source']['name'];
})->asArray()->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers['1-user1']['_source']);
$this->assertArrayHasKey('name', $customers['1-user1']['_source']);
$this->assertArrayHasKey('email', $customers['1-user1']['_source']);
$this->assertArrayHasKey('address', $customers['1-user1']['_source']);
$this->assertArrayHasKey('status', $customers['1-user1']['_source']);
$this->assertArrayHasKey('id', $customers['2-user2']['_source']);
$this->assertArrayHasKey('name', $customers['2-user2']['_source']);
$this->assertArrayHasKey('email', $customers['2-user2']['_source']);
$this->assertArrayHasKey('address', $customers['2-user2']['_source']);
$this->assertArrayHasKey('status', $customers['2-user2']['_source']);
$this->assertArrayHasKey('id', $customers['3-user3']['_source']);
$this->assertArrayHasKey('name', $customers['3-user3']['_source']);
$this->assertArrayHasKey('email', $customers['3-user3']['_source']);
$this->assertArrayHasKey('address', $customers['3-user3']['_source']);
$this->assertArrayHasKey('status', $customers['3-user3']['_source']);
}
public function testAfterFindGet()

View File

@@ -20,7 +20,7 @@ class ElasticSearchConnectionTest extends ElasticSearchTestCase
$connection->open();
$this->assertNotNull($connection->activeNode);
$this->assertArrayHasKey('name', reset($connection->nodes));
$this->assertArrayHasKey('hostname', reset($connection->nodes));
// $this->assertArrayHasKey('hostname', reset($connection->nodes));
$this->assertArrayHasKey('version', reset($connection->nodes));
$this->assertArrayHasKey('http_address', reset($connection->nodes));
}

View File

@@ -49,7 +49,7 @@ class QueryBuilderTest extends ElasticSearchTestCase
public function testYiiCanBeFoundByQuery()
{
$this->prepareDbData();
$queryParts = ['field' => ['title' => 'yii']];
$queryParts = ['term' => ['title' => 'yii']];
$query = new Query();
$query->from('yiitest', 'article');
$query->query = $queryParts;

View File

@@ -40,16 +40,16 @@ class QueryTest extends ElasticSearchTestCase
$this->assertEquals(['name', 'status'], $query->fields);
$result = $query->one($this->getConnection());
$this->assertEquals(2, count($result['_source']));
$this->assertArrayHasKey('status', $result['_source']);
$this->assertArrayHasKey('name', $result['_source']);
$this->assertEquals(2, count($result['fields']));
$this->assertArrayHasKey('status', $result['fields']);
$this->assertArrayHasKey('name', $result['fields']);
$this->assertArrayHasKey('_id', $result);
$query->fields([]);
$this->assertEquals([], $query->fields);
$result = $query->one($this->getConnection());
$this->assertEquals([], $result['_source']);
$this->assertArrayNotHasKey('fields', $result);
$this->assertArrayHasKey('_id', $result);
$query->fields(null);

View File

@@ -70,25 +70,6 @@ trait ActiveRecordTestTrait
$this->assertTrue($customers[1] instanceof $customerClass);
$this->assertTrue($customers[2] instanceof $customerClass);
// find all asArray
$customers = $customerClass::find()->asArray()->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]);
$this->assertArrayHasKey('name', $customers[0]);
$this->assertArrayHasKey('email', $customers[0]);
$this->assertArrayHasKey('address', $customers[0]);
$this->assertArrayHasKey('status', $customers[0]);
$this->assertArrayHasKey('id', $customers[1]);
$this->assertArrayHasKey('name', $customers[1]);
$this->assertArrayHasKey('email', $customers[1]);
$this->assertArrayHasKey('address', $customers[1]);
$this->assertArrayHasKey('status', $customers[1]);
$this->assertArrayHasKey('id', $customers[2]);
$this->assertArrayHasKey('name', $customers[2]);
$this->assertArrayHasKey('email', $customers[2]);
$this->assertArrayHasKey('address', $customers[2]);
$this->assertArrayHasKey('status', $customers[2]);
// find by a single primary key
$customer = $customerClass::findOne(2);
$this->assertTrue($customer instanceof $customerClass);
@@ -136,6 +117,25 @@ trait ActiveRecordTestTrait
'status' => 1,
'profile_id' => null,
], $customer);
// find all asArray
$customers = $customerClass::find()->asArray()->all();
$this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]);
$this->assertArrayHasKey('name', $customers[0]);
$this->assertArrayHasKey('email', $customers[0]);
$this->assertArrayHasKey('address', $customers[0]);
$this->assertArrayHasKey('status', $customers[0]);
$this->assertArrayHasKey('id', $customers[1]);
$this->assertArrayHasKey('name', $customers[1]);
$this->assertArrayHasKey('email', $customers[1]);
$this->assertArrayHasKey('address', $customers[1]);
$this->assertArrayHasKey('status', $customers[1]);
$this->assertArrayHasKey('id', $customers[2]);
$this->assertArrayHasKey('name', $customers[2]);
$this->assertArrayHasKey('email', $customers[2]);
$this->assertArrayHasKey('address', $customers[2]);
$this->assertArrayHasKey('status', $customers[2]);
}
public function testFindScalar()