Carsten Brandt
11 years ago
33 changed files with 2834 additions and 2688 deletions
@ -0,0 +1,32 @@ |
|||||||
|
The Yii framework is free software. It is released under the terms of |
||||||
|
the following BSD License. |
||||||
|
|
||||||
|
Copyright © 2008 by Yii Software LLC (http://www.yiisoft.com) |
||||||
|
All rights reserved. |
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without |
||||||
|
modification, are permitted provided that the following conditions |
||||||
|
are met: |
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright |
||||||
|
notice, this list of conditions and the following disclaimer. |
||||||
|
* Redistributions in binary form must reproduce the above copyright |
||||||
|
notice, this list of conditions and the following disclaimer in |
||||||
|
the documentation and/or other materials provided with the |
||||||
|
distribution. |
||||||
|
* Neither the name of Yii Software LLC nor the names of its |
||||||
|
contributors may be used to endorse or promote products derived |
||||||
|
from this software without specific prior written permission. |
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||||
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||||
|
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||||
|
POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,92 @@ |
|||||||
|
Elasticsearch Query and ActiveRecord for Yii 2 |
||||||
|
============================================== |
||||||
|
|
||||||
|
This extension provides the [elasticsearch](http://www.elasticsearch.org/) integration for the Yii2 framework. |
||||||
|
It includes basic querying/search support and also implements the `ActiveRecord` pattern that allows you to store active |
||||||
|
records in elasticsearch. |
||||||
|
|
||||||
|
To use this extension, you have to configure the Connection class in your application configuration: |
||||||
|
|
||||||
|
```php |
||||||
|
return [ |
||||||
|
//.... |
||||||
|
'components' => [ |
||||||
|
'elasticsearch' => [ |
||||||
|
'class' => 'yii\elasticsearch\Connection', |
||||||
|
'hosts' => [ |
||||||
|
['hostname' => 'localhost', 'port' => 9200], |
||||||
|
// configure more hosts if you have a cluster |
||||||
|
], |
||||||
|
], |
||||||
|
] |
||||||
|
]; |
||||||
|
``` |
||||||
|
|
||||||
|
|
||||||
|
Installation |
||||||
|
------------ |
||||||
|
|
||||||
|
The preferred way to install this extension is through [composer](http://getcomposer.org/download/). |
||||||
|
|
||||||
|
Either run |
||||||
|
|
||||||
|
``` |
||||||
|
php composer.phar require yiisoft/yii2-elasticsearch "*" |
||||||
|
``` |
||||||
|
|
||||||
|
or add |
||||||
|
|
||||||
|
```json |
||||||
|
"yiisoft/yii2-elasticsearch": "*" |
||||||
|
``` |
||||||
|
|
||||||
|
to the require section of your composer.json. |
||||||
|
|
||||||
|
|
||||||
|
Using the Query |
||||||
|
--------------- |
||||||
|
|
||||||
|
TBD |
||||||
|
|
||||||
|
Using the ActiveRecord |
||||||
|
---------------------- |
||||||
|
|
||||||
|
For general information on how to use yii's ActiveRecord please refer to the [guide](https://github.com/yiisoft/yii2/blob/master/docs/guide/active-record.md). |
||||||
|
|
||||||
|
For defining an elasticsearch ActiveRecord class your record class needs to extend from `yii\elasticsearch\ActiveRecord` and |
||||||
|
implement at least the `attributes()` method to define the attributes of the record. |
||||||
|
The primary key (the `_id` field in elasticsearch terms) is represented by `getId()` and `setId()` and can not be changed. |
||||||
|
The primary key is not part of the attributes. |
||||||
|
|
||||||
|
primary key can be defined via [[primaryKey()]] which defaults to `id` if not specified. |
||||||
|
The primaryKey needs to be part of the attributes so make sure you have an `id` attribute defined if you do |
||||||
|
not specify your own primary key. |
||||||
|
|
||||||
|
The following is an example model called `Customer`: |
||||||
|
|
||||||
|
```php |
||||||
|
class Customer extends \yii\elasticsearch\ActiveRecord |
||||||
|
{ |
||||||
|
public function attributes() |
||||||
|
{ |
||||||
|
return ['id', 'name', 'address', 'registration_date']; |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
You may override [[index()]] and [[type()]] to define the index and type this record represents. |
||||||
|
|
||||||
|
The general usage of elasticsearch ActiveRecord is very similar to the database ActiveRecord as described in the |
||||||
|
[guide](https://github.com/yiisoft/yii2/blob/master/docs/guide/active-record.md). |
||||||
|
It supports the same interface and features except the following limitations and additions(*!*): |
||||||
|
|
||||||
|
- As elasticsearch does not support SQL, the query API does not support `join()`, `groupBy()`, `having()` and `union()`. |
||||||
|
Sorting, limit, offset and conditional where are all supported. |
||||||
|
- `from()` does not select the tables, but the [index](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/glossary.html#glossary-index) |
||||||
|
and [type](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/glossary.html#glossary-type) to query against. |
||||||
|
- `select()` has been replaced with `fields()` which basically does the same but `fields` is more elasticsearch terminology. |
||||||
|
It defines the fields to retrieve from a document. |
||||||
|
- `via`-relations can not be defined via a table as there are not tables in elasticsearch. You can only define relations via other records. |
||||||
|
- As elasticsearch is a data storage and search engine there is of course support added for search your records. |
||||||
|
TBD ... |
||||||
|
- It is also possible to define relations from elasticsearch ActiveRecords to normal ActiveRecord classes and vice versa. |
@ -0,0 +1,27 @@ |
|||||||
|
{ |
||||||
|
"name": "yiisoft/yii2-elasticsearch", |
||||||
|
"description": "Elasticsearch integration and ActiveRecord for the Yii framework", |
||||||
|
"keywords": ["yii", "elasticsearch", "active-record", "search", "fulltext"], |
||||||
|
"type": "yii2-extension", |
||||||
|
"license": "BSD-3-Clause", |
||||||
|
"support": { |
||||||
|
"issues": "https://github.com/yiisoft/yii2/issues?labels=ext%3Aelasticsearch", |
||||||
|
"forum": "http://www.yiiframework.com/forum/", |
||||||
|
"wiki": "http://www.yiiframework.com/wiki/", |
||||||
|
"irc": "irc://irc.freenode.net/yii", |
||||||
|
"source": "https://github.com/yiisoft/yii2" |
||||||
|
}, |
||||||
|
"authors": [ |
||||||
|
{ |
||||||
|
"name": "Carsten Brandt", |
||||||
|
"email": "mail@cebe.cc" |
||||||
|
} |
||||||
|
], |
||||||
|
"require": { |
||||||
|
"yiisoft/yii2": "*" |
||||||
|
}, |
||||||
|
"autoload": { |
||||||
|
"psr-0": { "yii\\elasticsearch\\": "" } |
||||||
|
}, |
||||||
|
"target-dir": "yii/elasticsearch" |
||||||
|
} |
@ -1,9 +1,8 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
namespace yiiunit\framework\elasticsearch; |
namespace yiiunit\extensions\elasticsearch; |
||||||
|
|
||||||
use yii\elasticsearch\Connection; |
use yii\elasticsearch\Connection; |
||||||
use yii\elasticsearch\ActiveQuery; |
|
||||||
use yii\helpers\Json; |
use yii\helpers\Json; |
||||||
use yiiunit\framework\ar\ActiveRecordTestTrait; |
use yiiunit\framework\ar\ActiveRecordTestTrait; |
||||||
use yiiunit\data\ar\elasticsearch\ActiveRecord; |
use yiiunit\data\ar\elasticsearch\ActiveRecord; |
@ -0,0 +1,14 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace yiiunit\extensions\elasticsearch; |
||||||
|
|
||||||
|
use yii\redis\Connection; |
||||||
|
|
||||||
|
/** |
||||||
|
* @group elasticsearch |
||||||
|
*/ |
||||||
|
class ElasticSearchConnectionTest extends ElasticSearchTestCase |
||||||
|
{ |
||||||
|
// TODO |
||||||
|
|
||||||
|
} |
@ -1,10 +1,13 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
namespace yiiunit\framework\elasticsearch; |
namespace yiiunit\extensions\elasticsearch; |
||||||
|
|
||||||
|
use Yii; |
||||||
use yii\elasticsearch\Connection; |
use yii\elasticsearch\Connection; |
||||||
use yiiunit\TestCase; |
use yiiunit\TestCase; |
||||||
|
|
||||||
|
Yii::setAlias('@yii/elasticsearch', __DIR__ . '/../../../../extensions/elasticsearch'); |
||||||
|
|
||||||
/** |
/** |
||||||
* ElasticSearchTestCase is the base class for all elasticsearch related test cases |
* ElasticSearchTestCase is the base class for all elasticsearch related test cases |
||||||
*/ |
*/ |
@ -1,6 +1,6 @@ |
|||||||
<?php |
<?php |
||||||
|
|
||||||
namespace yiiunit\framework\elasticsearch; |
namespace yiiunit\extensions\elasticsearch; |
||||||
|
|
||||||
use yii\elasticsearch\Query; |
use yii\elasticsearch\Query; |
||||||
|
|
@ -1,22 +0,0 @@ |
|||||||
<?php |
|
||||||
|
|
||||||
namespace yiiunit\framework\elasticsearch; |
|
||||||
|
|
||||||
use yii\redis\Connection; |
|
||||||
|
|
||||||
/** |
|
||||||
* @group elasticsearch |
|
||||||
*/ |
|
||||||
class ElasticSearchConnectionTest extends ElasticSearchTestCase |
|
||||||
{ |
|
||||||
/** |
|
||||||
* Empty DSN should throw exception |
|
||||||
* @expectedException \yii\base\InvalidConfigException |
|
||||||
*/ |
|
||||||
public function testEmptyDSN() |
|
||||||
{ |
|
||||||
$db = new Connection(); |
|
||||||
$db->open(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
Loading…
Reference in new issue