where('type', 2)->column('modelid', 'id'); if (count($models) > 0) { foreach ($models as $k => $v) { if ($v['type'] == 1) { //独立表 Db::name($v['tablename'])->where('status', 1)->chunk(100, function ($list) use ($category) { foreach ($list as $val) { self::update(($category[$val['catid']] ?? 0), $val['catid'], $val['id'], $val); } }); } elseif ($v['type'] == 2) { Db::view($v['tablename'], '*') ->where('status', 1)->view($v['tablename'] . '_data', '*', $v['tablename'] . '.id=' . $v['tablename'] . '_data' . '.did', 'LEFT') ->chunk(100, function ($list) use ($category) { foreach ($list as $val) { self::update(($category[$val['catid']] ?? 0), $val['catid'], $val['id'], $val, $val); } }); } } } return true; } /** * 新增/更新索引 */ public static function update($modelid, $catid, $id, $data, $dataExt) { $res = []; $res['pid'] = $catid . '_' . $id; $res['catid'] = $catid; $res['id'] = $id; $res['modelid'] = $modelid; $res['title'] = $data['title'] ?? ''; $res['thumb'] = $data['thumb'] ?? ''; $res['content'] = isset($dataExt['content']) ? strip_tags(htmlspecialchars_decode($dataExt['content'])) : ''; $res['publish_time'] = $data['publish_time'] ?? 0; $res['url'] = buildContentUrl($catid, $id); Xunsearch::instance(self::getProjectName())->update($res); } /** * 删除 */ public static function del($catid, $id) { Xunsearch::instance(self::getProjectName())->del($catid . '_' . $id); } public static function setQuery($query, $fulltext = true, $fuzzy = false, $synonyms = false) { return Xunsearch::instance(self::getProjectName())->setQuery($query, $fulltext, $fuzzy, $synonyms); } /** * 获取搜索结果 */ public static function search($page = 1, $pagesize = 20, $order = '', $query = []) { return Xunsearch::instance(self::getProjectName())->search($page, $pagesize, $order, $query); } /** * 获取搜索热门关键字 */ public static function hot() { return Xunsearch::instance(self::getProjectName())->getXS()->search->getHotQuery(); } // 获取项目名 public static function getProjectName() { $config = get_addon_config('cms'); return $config['xunsearch_project_name'] ?? 'cms'; } }