Yii2-elasticsearch 怎么用啊?
Yii2-elasticsearch扩展为Yii2.0框架提供了Elasticsearch集成;它包括基本的查询/搜索支持,还实现了允许用户在 Elasticsearch 中存储活动记录的模式。下面本篇文章就来和大家了解怎么使用Yii2-elasticsearch扩展,进行ElasticSearch 搜索!
课程推荐→:《elasticsearch全文搜索实战》(实战视频)
想把自己的博客用上 ElasticSearch 搜索,用的是 Yii2-elasticsearch 扩展
搞了半天不会用,没搞明白 elasticsearch 是个怎么回事,是要把 Mysql 中的数据弄到 ES 中去吗?
难道每次都要到msql中去把数据找出来,再一个一个赋值给 ES 吗?
<code> $posts = Post::find()->all(); $postElastic = new PostElastic(); $postElastic->attributes = ['name' => $postElastic[0]->name]; </code>
要像上面这样嘛?那也太蛋疼了吧
但是直接 Contents::find()->all()
查出来的也没有数据,
<code> class Contents extends \yii\elasticsearch\ActiveRecord { public function attributes() { return ['id', 'title', 'slug', 'created_at', 'text', 'type', 'status']; } } </code>
回复内容:
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
1、安装yii2-elasticsearch
根据GitHub上的yii2-elasticsearch进行安装
yii2-elasticsearch的GitHub地址:https://github.com/yiisoft/yii2-elasticsearch/
要求
根据您使用的 Elasticsearch 版本,您需要此扩展的不同版本。
对于 Elasticsearch 1.6.0 到 1.7.6,使用扩展版本 2.0.x
对于 Elasticsearch 5.x 或更高版本,请使用扩展版本 2.1.x
安装
安装此扩展的首选方法是通过composer:
composer require --prefer-dist yiisoft/yii2-elasticsearch:"~2.1.0"
配置
要使用此扩展,您必须在应用程序配置中配置 Connection 类:
return [ //.... 'components' => [ 'elasticsearch' => [ 'class' => 'yii\elasticsearch\Connection' , 'nodes' => [ [ 'http_address' => '127.0.0.1:9200' ], // 如果你有集群,配置更多主机 ], 'dslVersion' => 7 , // 默认为 5 ], ] ];
Yii2-elasticsearch安装完毕后,就是使用了。
2、Yii2-elasticsearch的简单使用
使用Yii2-elasticsearch需要对elasticsearch一些基本的文档内容要大体有些了解,可以进官网进行查看文档,这里就不过多介绍,直接上有关Yii2源码部分,一看就懂。
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
打完收工。。。。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
