首先自己先根據GitHub上的yii2-elasticsearch進行安裝,對elasticsearch一些基本的檔案內容要大體有些了解,可以進官網進行查看檔案,這里就不過多介紹,直接上有關Yii2原始碼部分,一看就懂,git???????GitHub - yiisoft/yii2-elasticsearch: Yii 2 Elasticsearch extensionYii 2 Elasticsearch extension. Contribute to yiisoft/yii2-elasticsearch development by creating an account on GitHub.
https://github.com/yiisoft/yii2-elasticsearch/model部分:
<?php
namespace app\models\es_models;
use yii\elasticsearch\ActiveRecord;
class Document extends ActiveRecord
{
public static function index()
{
return 'document';//設定檔案名稱,不設定默認帶s結尾
}
//指定檔案型別
public static function type()
{
return '_doc';
}
//指定檔案屬性
public function attributes()
{
return ['id', 'title','content','status','author'];
}
public static function getMapping()
{
return [
'properties' => [
'id'=> ['type' => 'integer'],
'title'=> ['type' => 'text','analyzer'=>'ik_smart'],
'content'=> ['type' => 'text','analyzer'=>'ik_smart'],
'status'=> ['type' => 'integer'],
'author'=> ['type' => 'text','analyzer'=>'ik_smart'],
]
];
}
/**
* Create this model's index
*/
public static function createIndex()
{
$db = static::getDb();
$command = $db->createCommand();
$command->createIndex(static::index(), [
'mappings' => static::getMapping(),
]);
}
public function checkIndex()
{
$db = self::getDb();
$command = $db->createCommand();
if (!$command->indexExists(self::index())) {
return false;
}else{
return true;
}
}
}
控制器部分:
<?php
namespace app\controllers;
use app\models\es_models\Document;
use yii\web\Controller;
use Yii;
class EsSearchController extends Controller
{
//創建Index
public function actionCreateIndex()
{
$es = new Document();
if(!$es->checkIndex()){
$es::createIndex();
echo '創建成功';
die;
}
echo '已創建';die;
}
//搜索
public function actionEsSearch()
{
$page = Yii::$app->request->get('page') ?: 1;
$page_size = Yii::$app->request->get('pageSize') ?: 10;
$keyword = Yii::$app->request->get('keyword') ?: '';
$offset = ($page - 1) * $page_size;
$es = new Document();
//此處組裝query有點小坑,可以根據es檔案把json轉為陣列,不然容易出錯
//此處的條件相當于where status in (1,2) and (title like '%keyword%' or content like '%keyword%')
$query = [
'bool' => [
'must' => [
[
'terms' => [
'status' => [1,2],
],
],
[
'bool' => [
'should' => [
[
'match' => [
'title' => [
'query' => $keyword,
'boost' => 1, //權重
],
]
],
[
'match' => [
'content' => [
'query' => $keyword,
'boost' => 1, //權重
],
]
],
],
],
],
],
],
];
$hightlight = [
"pre_tags" => ['<span class="text-danger">'],//要高亮的顏色css的class
"post_tags" => ['</span>'],
"fields" => [
'content' => new \stdClass(),
'title' => new \stdClass()
]
];
$es_data = $es::find()
->source(['id', 'title', 'content', 'status','author'])
->query($query)
->highlight($hightlight)
->offset($offset)
->limit($page_size)
->asArray()
->all();
echo json_encode($es_data);//打完收工
exit;
}
//搞點資料測驗
public function actionSetEsContent()
{
$Document = new Document();
$Document->id = 1; // setting primary keys is only allowed for new records
$Document->title = '大佬'; // attributes can be set one by one
$Document->content = '大佬6666';
$Document->status = 1;
$Document->author = '牛皮';
$res = $Document->save();
}
}
先執行創建index的方法:

可以看到kibana后臺界面已經成功創建出document,(kibana是es的可視化界面可以在官網查看安裝檔案,安裝對應es版本即可)

下一步我們執行創建假資料的介面actionSetEsContent,改變資料執行多幾遍搞多幾條資料,開發時可以寫一個同步文章的命令列介面,定時執行把文章更新到es,

此時kibana里已經有一條資料,
最后我們執行搜索介面actionEsSearch

打完收工,,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/398633.html
標籤:其他
