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 |
||||
|
||||
namespace yiiunit\framework\elasticsearch; |
||||
namespace yiiunit\extensions\elasticsearch; |
||||
|
||||
use yii\elasticsearch\Connection; |
||||
use yii\elasticsearch\ActiveQuery; |
||||
use yii\helpers\Json; |
||||
use yiiunit\framework\ar\ActiveRecordTestTrait; |
||||
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 |
||||
|
||||
namespace yiiunit\framework\elasticsearch; |
||||
namespace yiiunit\extensions\elasticsearch; |
||||
|
||||
use Yii; |
||||
use yii\elasticsearch\Connection; |
||||
use yiiunit\TestCase; |
||||
|
||||
Yii::setAlias('@yii/elasticsearch', __DIR__ . '/../../../../extensions/elasticsearch'); |
||||
|
||||
/** |
||||
* ElasticSearchTestCase is the base class for all elasticsearch related test cases |
||||
*/ |
@ -1,6 +1,6 @@
|
||||
<?php |
||||
|
||||
namespace yiiunit\framework\elasticsearch; |
||||
namespace yiiunit\extensions\elasticsearch; |
||||
|
||||
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