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
打完收工。。。。

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具