Yii框架+ELasticsearch 使用
浏览量:412
一、修改 config/web.php 文件,给 cookieValidationKey 配置项添加一个密钥
'request' => [ 在插入后的秘密密钥(如果它是空的),这是必需的:Cookie验证 'cookieValidationKey' => 'lianghuijuProject', ],

yii2框架中添加Elasticsearch扩展类库
编辑composer.json文件,添加
"require": {
        ...
        "yiisoft/yii2-elasticsearch": "~2.0.0",
        ...
    },
添加完成后,终端执行。composer update

修改config/web.php文件,引入Elasticsearch配置
'components' => [ 'elasticsearch' => [ 'class' => 'yii\elasticsearch\Connection', 'nodes' => [ ['http_address' => '127.0.0.1:9200'],// configure more hosts if you have a cluster ], ], ... ],

新增Elasticsearch数据
Create 创建数据
model
<?php
namespace app\models;
use yii\elasticsearch\ActiveRecord;
class Customer extends ActiveRecord{   
    /*
     * @return 属性列表
     */    
    public function attributes()
    {        
       return ['name', 'address', 'registration_date'];
    }
}?>controller
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\Elastic;
class SiteController extends Controller{  
public function actionIndex()
{
      $customer = new Elastic();      
      //primaryKey 定义 _id 字段,当不设置改值时,会随机生成22位字符。
      $customer->primaryKey = 1;
      $name = 'lianghuiju';
      $address = 'beijing';
      $customer->name = $name;
      $customer->address = $address;
      $customer->registration_date = time();
      $customer->save();
    
  }
}?>查询数据是否保存成功
<?php
namespace app\controllers;
use app\models\Elastic;
use Yii;
use yii\web\Controller;
use yii\helpers\ArrayHelper;
class SiteController extends Controller
{
    /**
     * 列表展示
     * Displays homepage.
     * @return string
     */
    public function actionIndex() {
        echo "<pre>";
        $customer = Elastic::findOne(1);
        var_dump($customer);
        $data = ArrayHelper::toArray($customer);
        var_dump($data);
    }
}
?>返回结果:

将对象转数组取出我们新增的数据。
use yii\helpers\ArrayHelper; $data = ArrayHelper::toArray($customer);
返回结果:

更多的查询方法
//获取_indexCustomer::index();
//获取_typeCustomer::type();
//查询所有记录$customers = Customer::find()->all();
//通过主键_id查询,return object$customer = Customer::get(1);
//通过主键_id查询获取多条记录,return object$customers = Customer::mget([1,2]);
//通过映射字段查询一条记录。$customer = Customer::find()->where(['name' => 'wneji'])->one();
//查询name字段中包含 'wenji' 的所有纪录。$customers = Customer::find()->query(["match" => ["name" => "wneji"]])->all();
更新Elasticsearch数据
update( ) 更新数据
<?php
namespace app\controllers;
use app\models\Elastic;
use Yii;
use yii\web\Controller;
use yii\helpers\ArrayHelper;
class SiteController extends Controller
{
    /**
     * 列表展示
     * Displays homepage.
     * @return string
     */
    public function actionIndex() {
        $id = 1;
        $name = 'new lianghuiju';
        $address = '深圳';
        $customer = Elastic::findOne($id);
        $data = ArrayHelper::toArray($customer);
        if(empty($data)){
            die('暂无数据');
        }
        $customer->name = $name;
        $customer->address = $address;
        $customer->registration_date = time();
        if ($customer->update() == false) {
            die('更新失败');
        }else{
            echo "更新成功";
        }
    }
}
?>updateAll( )更新所有记录
Customer::updateAll(['address' => '广东'], ['address' => 'shenzhen']);
yii2删除Elasticsearch数据
<?php
namespace app\controllers;
use app\models\Elastic;
use Yii;
use yii\web\Controller;
use yii\helpers\ArrayHelper;
class SiteController extends Controller
{
    /**
     * 列表展示
     * Displays homepage.
     * @return string
     */
    public function actionIndex() {
        $customer = Elastic::findOne(1);
        if(empty($customer)){
            die('暂无数据');
        }
        $customer->delete();
    }
}
?>deleteAll( ) 批量删除
Customer::deleteAll( ['address' => 'shenzhen'] );

神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。