Yii2使用xunsearch搜索功能
in Notes with 1 comment

Yii2使用xunsearch搜索功能

in Notes with 1 comment

请输入图片描述

添加新文章时自动入库

创建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();
Responses / Cancel Reply
  1. hu

    删除是如何操作的?谢谢。

    Reply