添加新文章时自动入库
创建XsBehavior并绑定到Article model模型中。
public function behaviors()
{
return [
XsBehavior::className(),
];
}
XsBehavior中的实现过程:
<?php
namespace common\behaviors;
use common\models\Article;
use common\models\Search;
use yii\base\Behavior;
use yii\db\ActiveRecord;
class XsBehavior extends Behavior
{
public function events()
{
return [
Article::EVENT_AFTER_INSERT => 'afterSave',
Article::EVENT_AFTER_UPDATE => 'afterSave'
];
}
public function afterSave($event)
{
$article = Article::findOne(['id' => $event->sender->id]);
if (!empty($article)) {
if ($event->name == 'afterInsert') {
$search = new Search();
$search->id = $event->sender->id;
} else {
$search = Search::findOne($event->sender->id);
}
$search->status = $article->status;
$search->title = $article->title;
$search->content = $event->sender->content;
$search->published_at = $article->published_at;
$search->save();
}
}
}
说明
有必要指出的是,出于性能优化设计,所有的索引操作(包含添加、删除、修改文档)均是异步的 行为。也就是说在 PHP-SDK 的相关 API 返回后,只是说明已经将索引变动提交到操作队列中, 而并不是已经立即更新到磁盘上的索引数据库文件。因此,搜索结果将不能立即体现出您的变动。
但请放心,这个时间差我们已经控制在非常合理的范围内,通常是若干秒。
特别说明,索引清空是同步操作,立即生效。如果确实有必要,您可以以使用 Indexer的 --flush 选项来强制刷新索引。
$xs = new XS('demo'); // 建立 XS 对象,项目名称为:demo
$index = $xs->index; // 获取 索引对象
$index->flushIndex();
ActiveRecord 对象实现了绝大多数据接口,完全可以像使用普通数据库模型一样使用它。如果需要 访问原始的 xunsearch 对象,请通过以下方式获取 Database 对象:
$db = Demo::getDb();
$search = $db->getSearch();
$index = $db->getIndex();
// 如有必要,还可以获得 scws 分词对象
$scws = $db->getScws();
Yii2.0使用xunsearch检索功能
$search = Database::find()->where($keyword)->fuzzy();
$result = $search->all();
Yii2.0使用xunsearch获取最近热词
$recent = Database::getDb()->getSearch()->setQuery($keyword)->getRelatedQuery();
本文由 小小小气鬼 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 10, 2018 at 11:28 am
删除是如何操作的?谢谢。