做的乙個專案,資料是從es獲取的,所以最近研究了下yii2.0和es.
yii2.0有自身帶有乙個擴充套件 yii-elasticsearch.php,在配置的時候
config->web.php中配置
'elasticsearch' => ['class' => 'yii\elasticsearch\connection',
'is_conversion_net_ip' => true,
'conversion_ips' => [
'127.0.0.1' => '127.0.0.3',
'127.0.0.2' => '127.0.0.4',
],//這兩個配置是修改yii2.0擴充套件中的connection.php,有內網ip的節點的時候yii會返回內網的節點報錯,新增這一步是為了轉換。 研究好久不知道**的問題最後請大神來幫忙解決的。。。。
配置完成之後,在瀏覽器可以追蹤bug,配置檔案裡這樣配置就好
if (yii_env_dev)這樣在查詢es的時候,可以看到最後生成的es查詢語句。這樣配置檔案就完成了。下面是用es查詢
在models新建了乙個類 index_type_relation.php
<?phpuse yii;
use yii\elasticsearch\activerecord;//使用activerecord類
use yii\helpers\arrayhelper;
class index_type_relation extends activerecord
//# table
public static function type()
public function attributes()
}
上面是查詢乙個index,乙個type的設定。在controller中的
/*** 獲取index_type_relation
*/$relation = new index_type_relation();
$relation = $relation->find()->limit(10000)->all();
$data = arrayhelper::toarray($relation);
$map_arr = array();
foreach ($data as $k=>$val)
return $map_arr;
}上面是乙個index,乙個type的查詢例項,es支援多個index,多個type的查詢,感覺這個很強大,mysql幾次查庫es乙個查詢語句搞定
這個沒有用activerecord(沒有研究出來怎麼用),用的是query類,寫了乙個index_query_data類,繼承query,使用自帶的from()、where()、limit()等
use yii\elasticsearch\query;class index_data_query extends query
}
中間出現乙個問題,yii框架是預設使用的get查詢方式,帶有聚合的查詢出來是源資料形式,所以修改了yii元件的search()方法。預設是get,傳post就用post的方式。
目前為止,需要的資料都可以從es獲取,其中感覺很有意思是聚合,類似mysql的groupby等。
注:查詢源資料不設定limit()的時候es預設是10條,最大是10000,所以查詢源資料設定limit(10000),帶有聚合的可以設定limit(0),這樣既提高查詢速度,符合條件的也都可以查出來。
以上是邊學習yii邊實踐,所以有學習不到位的地方,希望大家指正修改。
yii 2 0 寫入日誌
首先,我們的 web.php 配置檔案中,更改於下 log tracelevel yii debug 3 0,targets class yii log filetarget levels error warning trace 在 levels 中,增加了 trace,使用如下 yii trace...
yii 2 0 寫入日誌
首先,我們的 web.php 配置檔案中,更改於下 log tracelevel yii debug 3 0,targets class yii log filetarget levels error warning trace 在 levels 中,增加了 trace,使用如下 yii trace...
yii2 0框架報錯
在action中執行echo,var dump等方法後沒有中斷,yii1.0中ajax方法返回資料可以直接通過echo獲取,但是yii2.0的response類中增加了對於返回輸出資訊的定義,所以當echo後沒有中斷程式,yii自帶的 就會出錯,不過目前我發現的情況是,只有在返回的資料結構複雜的情況...