
首先自己先根据GitHub上的yii2-elasticsearch进行安装,对elasticsearch一些基本的文档内容要大体有些了解,可以进官网进行查看文档,这里就不过多介绍,直接上有关Yii2源码部分,一看就懂。gitGitHub - 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部分:
[
'id'=> ['type' => 'integer'],
'title'=> ['type' => 'text','analyzer'=>'ik_smart'],
'content'=> ['type' => 'text','analyzer'=>'ik_smart'],
'status'=> ['type' => 'integer'],
'author'=> ['type' => 'text','analyzer'=>'ik_smart'],
]
];
}
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;
}
}
}
控制器部分:
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" => [''],//要高亮的颜色css的class
"post_tags" => [''],
"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
打完收工。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)