<?php
namespace Module\Blog\Core;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Util\HtmlUtil;
use ModStart\Core\Util\TagUtil;
use Module\Vendor\Provider\SuperSearch\AbstractSuperSearchBiz;
use Module\Vendor\Provider\SuperSearch\AbstractSuperSearchProvider;
use Module\Vendor\Provider\SuperSearch\FieldTypes;
use Module\Vendor\Provider\SuperSearch\SuperSearchProvider;
class BlogSuperSearchBiz extends AbstractSuperSearchBiz
{
const NAME = 'blog';
public function name()
{
return self::NAME;
}
public function title()
{
return '博客';
}
public function providerName()
{
return modstart_config('Blog_BlogSuperSearchProvider');
}
public function fields()
{
return [
'id' => ['type' => FieldTypes::F_LONG],
'isPublished' => ['type' => FieldTypes::F_LONG],
'isTop' => ['type' => FieldTypes::F_LONG],
'categoryId' => ['type' => FieldTypes::F_LONG],
'title' => ['type' => FieldTypes::F_TEXT],
'summary' => ['type' => FieldTypes::F_TEXT],
'content' => ['type' => FieldTypes::F_TEXT],
'tag' => ['type' => FieldTypes::F_KEYWORD],
];
}
public function syncBatch(AbstractSuperSearchProvider $provider, $nextId)
{
$ret = ModelUtil::batch('blog', $nextId, 1000);
BlogSuperSearchBiz::syncUpsert($ret['records'], false);
$data = [];
$data['count'] = count($ret['records']);
$data['nextId'] = $ret['nextId'];
return $data;
}
* @return AbstractSuperSearchProvider
*/
public static function provider()
{
return SuperSearchProvider::get(modstart_config('Blog_BlogSuperSearchProvider'));
}
public static function syncUpsert($records, $checkExists = true)
{
$provider = self::provider();
if (empty($provider)) {
return;
}
if ($checkExists) {
$provider->ensureBucket('blog');
}
foreach ($records as $record) {
if (is_string($record['tag'])) {
$tags = TagUtil::string2Array($record['tag']);
} else {
$tags = $record['tag'];
}
$provider->upsert('blog', $record['id'], [
'id' => intval($record['id']),
'isPublished' => intval($record['isPublished']),
'isTop' => intval($record['isTop']),
'categoryId' => intval($record['categoryId']),
'title' => $record['title'],
'summary' => $record['summary'],
'content' => HtmlUtil::text($record['content']),
'tag' => $tags,
]);
}
}
public static function syncDelete($id)
{
$provider = self::provider();
if (empty($provider)) {
return;
}
$provider->delete('blog', $id);
}
}