diff --git a/package.json b/package.json index e720cf3..8e5adcf 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "docs:build": "vuepress build src", "docs:clean-dev": "vuepress dev src --clean-cache", "docs:dev": "vuepress dev src", - "docs:gen": "ts-node scripts/generate.ts", - "docs:release": "node --loader ts-node/esm scripts/release.ts && vuepress build src" + "docs:gen": "ts-node scripts/generate.ts" }, "devDependencies": { "@faker-js/faker": "7.6.0", @@ -27,5 +26,6 @@ "vuepress-plugin-redirect": "2.0.0-beta.221", "vuepress-theme-hope": "2.0.0-beta.221", "vuepress-vite": "2.0.0-beta.62" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/scripts/release.ts b/scripts/release.ts deleted file mode 100644 index dff94fb..0000000 --- a/scripts/release.ts +++ /dev/null @@ -1,72 +0,0 @@ -import glob from 'glob'; -import git from 'isomorphic-git'; -import nunjucks from 'nunjucks'; -import * as fs from 'fs'; - -function isVersionedBranch(name: string): boolean { - return name.startsWith('release-'); -} - -function getVersionFromBranch(name: string): string { - return name.substring('release-'.length); -} - -async function checkUncommittedFiles(fileDir: string) { - let uncommittedFiles = []; - const status = await git.statusMatrix({ fs, dir: '.', filter: f => f.startsWith(fileDir) }); - for (const [filepath, head, workdir, stage] of status) { - if (head != 1 || workdir != 1 || stage != 1) { - uncommittedFiles.push(filepath); - } - } - if (uncommittedFiles.length > 0) { - console.log(`Please commit the following files before release:`); - for (const file of uncommittedFiles) { - console.log(` ${file}`); - } - process.exit(1); - } -} - -async function checkoutVersions(locale: string) { - await checkUncommittedFiles(`src/${locale}docs/master`); - const branches = await git.listBranches({ fs, dir: '.', remote: 'origin' }) - const versionedBranches = branches.filter(isVersionedBranch); - const versions = ['master']; - for (const branch of versionedBranches) { - const version = getVersionFromBranch(branch); - versions.push(version); - await git.checkout({ - fs, - dir: '.', - ref: branch, - noUpdateHead: true, - force: true, - filepaths: [`src/${locale}docs/master`] - }) - fs.cpSync(`src/${locale}docs/master`, `src/${locale}docs/${version}`, { recursive: true }); - console.log(`Checking out ${branch} to src/${locale}docs/${version}`) - // disable edit link - const mdfiles = await glob(`src/${locale}docs/${version}/**/*.md`); - for (const mdfile of mdfiles) { - let mdContent = fs.readFileSync(mdfile, 'utf8'); - mdContent = mdContent.replace('---', '---\neditLink: false'); - fs.writeFileSync(mdfile, mdContent); - } - } - await git.checkout({ - fs, - dir: '.', - noUpdateHead: true, - force: true, - filepaths: [`src/${locale}docs/master`, `src/${locale}docs/README.md`] - }) - for (const version of versions) { - // render version info - const versionInfo = nunjucks.render(`./scripts/templates/${locale}VERSION.md.njk`, { current_version: version, versions: versions }); - fs.writeFileSync(`src/${locale}docs/${version}/VERSION.md`, versionInfo); - } -} - -await checkoutVersions(''); -await checkoutVersions('zh/'); diff --git a/src/.vuepress/navbar/en.ts b/src/.vuepress/navbar/en.ts index 5e466dd..4d30aa1 100644 --- a/src/.vuepress/navbar/en.ts +++ b/src/.vuepress/navbar/en.ts @@ -2,6 +2,6 @@ import { navbar } from "vuepress-theme-hope"; export const enNavbar = navbar([ "/", - { text: "Docs", icon: "explore", link: "/docs/master/" }, + { text: "Docs", icon: "explore", link: "/docs/" }, { text: "Blog", icon: "article-fill", link: "/blog/" }, ]); diff --git a/src/.vuepress/sidebar/en.ts b/src/.vuepress/sidebar/en.ts index 268577b..c7a460a 100644 --- a/src/.vuepress/sidebar/en.ts +++ b/src/.vuepress/sidebar/en.ts @@ -1,16 +1,79 @@ -import fs from 'fs'; -import { sidebar, SidebarItem } from "vuepress-theme-hope"; +import { sidebar } from "vuepress-theme-hope"; -var sidebars = {} - -const versions = fs.readdirSync('src/docs/', { withFileTypes: true }) - .filter((item) => item.isDirectory()) - .map((item) => item.name); -for (const version of versions) { - if (fs.existsSync(`src/docs/${version}/sidebar.json`)) { - const text = fs.readFileSync(`src/docs/${version}/sidebar.json`, 'utf-8'); - sidebars[`/docs/${version}/`] = JSON.parse(text) as SidebarItem; - } -} - -export const enSidebar = sidebar(sidebars); +export const enSidebar = sidebar({ + "/docs/": [ + { + "text": "Quick Start", + "icon": "launch", + "link": "quick-start" + }, + { + "text": "Deploy", + "icon": "start", + "collapsible": true, + "prefix": "deploy/", + "children": [ + "binary", + "docker", + "kubernetes" + ] + }, + { + "text": "Configuration", + "icon": "config_s", + "link": "config" + }, + { + "text": "Concepts", + "icon": "idea", + "collapsible": true, + "prefix": "concepts/", + "children": [ + "data-objects", + "algorithms", + "non-personalized", + "item-to-item", + "external", + "how-it-works", + "evaluation" + ] + }, + { + "text": "API", + "icon": "api", + "collapsible": true, + "prefix": "api/", + "children": [ + "restful-api", + "go-sdk", + "python-sdk", + "typescript-sdk", + "java-sdk", + "rust-sdk", + "php-sdk", + "ruby-sdk", + "dotnet-sdk" + ] + }, + { + "text": "Gorse Dashboard", + "icon": "dashboard", + "link": "gorse-dashboard" + }, + { + "text": "Benchmark", + "icon": "dashboard-fill", + "link": "benchmark/" + }, + { + "text": "Contribution Guide", + "icon": "pullrequest", + "link": "contribution-guide/" + }, + { + "text": "FAQ", + "icon": "faq", + "link": "faq/" + } + ] +}); diff --git a/src/.vuepress/sidebar/zh.ts b/src/.vuepress/sidebar/zh.ts index ed34333..d61d6b2 100644 --- a/src/.vuepress/sidebar/zh.ts +++ b/src/.vuepress/sidebar/zh.ts @@ -1,16 +1,77 @@ -import fs from 'fs'; -import { sidebar, SidebarItem } from "vuepress-theme-hope"; +import { sidebar } from "vuepress-theme-hope"; -var sidebars = {} -const versions = fs.readdirSync('src/zh/docs/', { withFileTypes: true }) - .filter((item) => item.isDirectory()) - .map((item) => item.name); -for (const version of versions) { - if (fs.existsSync(`src/zh/docs/${version}/sidebar.json`)) { - const text = fs.readFileSync(`src/zh/docs/${version}/sidebar.json`, 'utf-8'); - sidebars[`/zh/docs/${version}/`] = JSON.parse(text) as SidebarItem; - } -} - -export const zhSidebar = sidebar(sidebars); +export const zhSidebar = sidebar({ + "/zh/docs/": [ + { + "text": "快速上手", + "icon": "launch", + "link": "quick-start" + }, + { + "text": "部署", + "icon": "start", + "collapsible": true, + "prefix": "deploy/", + "children": [ + "binary", + "docker", + "kubernetes" + ] + }, + { + "text": "配置项", + "icon": "config_s", + "link": "config" + }, + { + "text": "概念详解", + "icon": "idea", + "collapsible": true, + "prefix": "concepts/", + "children": [ + "data-objects", + "algorithms", + "how-it-works", + "evaluation" + ] + }, + { + "text": "接口文档", + "icon": "api", + "prefix": "api/", + "collapsible": true, + "children": [ + "restful-api", + "go-sdk", + "python-sdk", + "typescript-sdk", + "java-sdk", + "rust-sdk", + "php-sdk", + "ruby-sdk", + "dotnet-sdk" + ] + }, + { + "text": "Gorse 控制台", + "icon": "dashboard", + "link": "gorse-dashboard" + }, + { + "text": "性能对比", + "icon": "dashboard-fill", + "link": "benchmark/" + }, + { + "text": "贡献指南", + "icon": "pullrequest", + "link": "contribution-guide/" + }, + { + "text": "常见问题", + "icon": "faq", + "link": "faq/" + } + ] +}); \ No newline at end of file diff --git a/src/README.md b/src/README.md index 52567b7..20eae00 100644 --- a/src/README.md +++ b/src/README.md @@ -7,7 +7,7 @@ heroText: Gorse tagline: An open-source recommender system service written in Go. actions: - text: Documentation - link: /docs/master/ + link: /docs/ type: primary - text: Live Demo diff --git a/src/docs/.gitignore b/src/docs/.gitignore deleted file mode 100644 index 1dbfde8..0000000 --- a/src/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*/ -!master diff --git a/src/docs/README.md b/src/docs/README.md index e69de29..360327d 100644 --- a/src/docs/README.md +++ b/src/docs/README.md @@ -0,0 +1,46 @@ +--- +title: Documentation +icon: explore +--- + +Welcome to the official documents for the Gorse recommender system. + +## Table of Contents + +- [Quick Start](quick-start.md) +- Deploy + - [Binary Deployment](deploy/binary.md) + - [Docker Deployment](deploy/docker.md) + - [Kubernetes Deployment](deploy/kubernetes.md) +- [Configuration](config.md) +- Concepts + - [Data Objects](concepts/data-objects.md) + - [Algorithms](concepts/algorithms.md) + - [Non-personalized Recommenders](concepts/non-personalized.md) + - [Item-to-Item Recommenders](concepts/item-to-item.md) + - [External Recommenders](concepts/external.md) + - [How It Works](concepts/how-it-works.md) + - [Evaluation](concepts/evaluation.md) +- API + - [RESTful API](api/restful-api.md) + - [Go SDK](api/go-sdk.md) + - [Python SDK](api/python-sdk.md) + - [TypeScript SDK](api/typescript-sdk.md) + - [Java SDK](api/java-sdk.md) + - [Rust SDK](api/rust-sdk.md) + - [PHP SDK](api/php-sdk.md) + - [Ruby SDK](api/ruby-sdk.md) + - [.NET SDK](api/dotnet-sdk.md) +- [Gorse Dashboard](gorse-dashboard.md) +- [Benchmark](benchmark.md) +- [Contribution Guide](contribution-guide.md) +- [FAQ](faq.md) + +## Contributing Guide + +You can start from any one of the following items to help improve Gorse documents: + +- Fix typos or format (punctuation, space, indentation, code block, etc.) +- Fix or update inappropriate or outdated descriptions +- Add missing content (sentence, paragraph, or a new document) +- [Translate docs changes from English to Chinese](https://gitlocalize.com/repo/8172/zh?utm_source=badge) diff --git a/src/docs/master/api/README.md b/src/docs/api/README.md similarity index 100% rename from src/docs/master/api/README.md rename to src/docs/api/README.md diff --git a/src/docs/master/api/apidocs.json b/src/docs/api/apidocs.json similarity index 100% rename from src/docs/master/api/apidocs.json rename to src/docs/api/apidocs.json diff --git a/src/docs/master/api/apidocs.md b/src/docs/api/apidocs.md similarity index 100% rename from src/docs/master/api/apidocs.md rename to src/docs/api/apidocs.md diff --git a/src/docs/master/api/dotnet-sdk.md b/src/docs/api/dotnet-sdk.md similarity index 100% rename from src/docs/master/api/dotnet-sdk.md rename to src/docs/api/dotnet-sdk.md diff --git a/src/docs/master/api/go-sdk.md b/src/docs/api/go-sdk.md similarity index 100% rename from src/docs/master/api/go-sdk.md rename to src/docs/api/go-sdk.md diff --git a/src/docs/master/api/java-sdk.md b/src/docs/api/java-sdk.md similarity index 100% rename from src/docs/master/api/java-sdk.md rename to src/docs/api/java-sdk.md diff --git a/src/docs/master/api/php-sdk.md b/src/docs/api/php-sdk.md similarity index 100% rename from src/docs/master/api/php-sdk.md rename to src/docs/api/php-sdk.md diff --git a/src/docs/master/api/python-sdk.md b/src/docs/api/python-sdk.md similarity index 100% rename from src/docs/master/api/python-sdk.md rename to src/docs/api/python-sdk.md diff --git a/src/docs/master/api/restful-api.md b/src/docs/api/restful-api.md similarity index 100% rename from src/docs/master/api/restful-api.md rename to src/docs/api/restful-api.md diff --git a/src/docs/master/api/ruby-sdk.md b/src/docs/api/ruby-sdk.md similarity index 100% rename from src/docs/master/api/ruby-sdk.md rename to src/docs/api/ruby-sdk.md diff --git a/src/docs/master/api/rust-sdk.md b/src/docs/api/rust-sdk.md similarity index 100% rename from src/docs/master/api/rust-sdk.md rename to src/docs/api/rust-sdk.md diff --git a/src/docs/master/api/typescript-sdk.md b/src/docs/api/typescript-sdk.md similarity index 100% rename from src/docs/master/api/typescript-sdk.md rename to src/docs/api/typescript-sdk.md diff --git a/src/docs/master/benchmark.md b/src/docs/benchmark.md similarity index 100% rename from src/docs/master/benchmark.md rename to src/docs/benchmark.md diff --git a/src/docs/master/concepts/README.md b/src/docs/concepts/README.md similarity index 100% rename from src/docs/master/concepts/README.md rename to src/docs/concepts/README.md diff --git a/src/docs/master/concepts/algorithms.md b/src/docs/concepts/algorithms.md similarity index 100% rename from src/docs/master/concepts/algorithms.md rename to src/docs/concepts/algorithms.md diff --git a/src/docs/master/concepts/data-objects.md b/src/docs/concepts/data-objects.md similarity index 98% rename from src/docs/master/concepts/data-objects.md rename to src/docs/concepts/data-objects.md index a41c14f..ef32cf4 100644 --- a/src/docs/master/concepts/data-objects.md +++ b/src/docs/concepts/data-objects.md @@ -63,7 +63,7 @@ item_ttl = 0 Multi-categories recommendations are common, take YouTube for example, where multiple recommendation categories are provided on the homepage. -![](../../../img/youtube-topics.png) +![](../../img/youtube-topics.png) Multiple categories can be distinguished by topics such as food, travel, etc., or by forms, e.g. live, short and long videos. Items will appear in the global recommendation stream, and in addition, the `Categories`` field determines which recommendation categories the items should appear in. For each recommendation API, there are a global version and a categorized version: @@ -80,7 +80,7 @@ Multiple categories can be distinguished by topics such as food, travel, etc., o For example, for a live badminton match, you can set its `Categories` to "Live" and "Sports". In this way, in addition to the default recommendation stream, the user can find the live stream in the "Live" and "Sports" recommendation categories. -![](../../../img/youtube-live.png) +![](../../img/youtube-live.png) ::: warning @@ -169,8 +169,8 @@ Positive feedback can be inserted into the recommender system when the user take ::: center -![](../../../img/tiktok.jpg =300x) -![](../../../img/youtube-mobile.jpg =300x) +![](../../img/tiktok.jpg =300x) +![](../../img/youtube-mobile.jpg =300x) ::: diff --git a/src/docs/master/concepts/evaluation.md b/src/docs/concepts/evaluation.md similarity index 95% rename from src/docs/master/concepts/evaluation.md rename to src/docs/concepts/evaluation.md index f3f4a89..7877935 100644 --- a/src/docs/master/concepts/evaluation.md +++ b/src/docs/concepts/evaluation.md @@ -17,7 +17,7 @@ where $R^r_u$ is the set of read feedback from user $u$, and $R^p_U$ is the set For example, there are two positive feedback types (like and star) in [GitRec](https://gitrec.gorse.io/#/). Thus, the like rate and star rate are shown on the overview page of the dashboard. -![](../../../img/dashboard-overview.png) +![](../../img/dashboard-overview.png) ## Offline Evaluation @@ -73,8 +73,8 @@ $$ The recalls of indices are listed in the "System Status" section of the dashboard homepage. -![](../../../img/evaluation-neighbor-index-recall.jpeg =400x) -![](../../../img/evaluation-mf-index-recall.jpeg =400x) +![](../../img/evaluation-neighbor-index-recall.jpeg =400x) +![](../../img/evaluation-mf-index-recall.jpeg =400x) If the recall of an index is extremely low, consider turning off the index. diff --git a/src/docs/master/concepts/external.md b/src/docs/concepts/external.md similarity index 100% rename from src/docs/master/concepts/external.md rename to src/docs/concepts/external.md diff --git a/src/docs/master/concepts/how-it-works.md b/src/docs/concepts/how-it-works.md similarity index 96% rename from src/docs/master/concepts/how-it-works.md rename to src/docs/concepts/how-it-works.md index ff0bd9f..ad10bbb 100644 --- a/src/docs/master/concepts/how-it-works.md +++ b/src/docs/concepts/how-it-works.md @@ -67,7 +67,7 @@ Gorse works like a waterfall. Users, items and feedbacks are the sources of wate ::: center -[![](../../../img/waterfall.jpeg =500x)](https://www.google.com.hk/maps/place/9494%2B2XX+Sanzhe+Pujingqu,+Xueshi+Rd,+Yueqing,+Wenzhou,+Zhejiang,+China,+325613/@28.367624,121.1074902,17z/data=!4m14!1m7!3m6!1s0x344fb1c336f6089f:0x289b31d5bd3c5903!2zQ2hpbmEsIFpoZWppYW5nLCBXZW56aG91LCBZdWVxaW5nLCDpm4HojaHplYfkuInmipjngJE!8m2!3d28.372423!4d121.091304!16s%2Fg%2F1tlqmqj3!3m5!1s0x344fb1be99ca855b:0x1d80848a11ae084d!8m2!3d28.367624!4d121.1074902!16s%2Fg%2F1tm8bqtb) +[![](../../img/waterfall.jpeg =500x)](https://www.google.com.hk/maps/place/9494%2B2XX+Sanzhe+Pujingqu,+Xueshi+Rd,+Yueqing,+Wenzhou,+Zhejiang,+China,+325613/@28.367624,121.1074902,17z/data=!4m14!1m7!3m6!1s0x344fb1c336f6089f:0x289b31d5bd3c5903!2zQ2hpbmEsIFpoZWppYW5nLCBXZW56aG91LCBZdWVxaW5nLCDpm4HojaHplYfkuInmipjngJE!8m2!3d28.372423!4d121.091304!16s%2Fg%2F1tlqmqj3!3m5!1s0x344fb1be99ca855b:0x1d80848a11ae084d!8m2!3d28.367624!4d121.1074902!16s%2Fg%2F1tm8bqtb) ::: diff --git a/src/docs/master/concepts/item-to-item.md b/src/docs/concepts/item-to-item.md similarity index 100% rename from src/docs/master/concepts/item-to-item.md rename to src/docs/concepts/item-to-item.md diff --git a/src/docs/master/concepts/non-personalized.md b/src/docs/concepts/non-personalized.md similarity index 100% rename from src/docs/master/concepts/non-personalized.md rename to src/docs/concepts/non-personalized.md diff --git a/src/docs/master/config.md b/src/docs/config.md similarity index 100% rename from src/docs/master/config.md rename to src/docs/config.md diff --git a/src/docs/master/contribution-guide.md b/src/docs/contribution-guide.md similarity index 100% rename from src/docs/master/contribution-guide.md rename to src/docs/contribution-guide.md diff --git a/src/docs/master/deploy/README.md b/src/docs/deploy/README.md similarity index 100% rename from src/docs/master/deploy/README.md rename to src/docs/deploy/README.md diff --git a/src/docs/master/deploy/binary.md b/src/docs/deploy/binary.md similarity index 100% rename from src/docs/master/deploy/binary.md rename to src/docs/deploy/binary.md diff --git a/src/docs/master/deploy/docker.md b/src/docs/deploy/docker.md similarity index 100% rename from src/docs/master/deploy/docker.md rename to src/docs/deploy/docker.md diff --git a/src/docs/master/deploy/kubernetes.md b/src/docs/deploy/kubernetes.md similarity index 100% rename from src/docs/master/deploy/kubernetes.md rename to src/docs/deploy/kubernetes.md diff --git a/src/docs/master/faq.md b/src/docs/faq.md similarity index 100% rename from src/docs/master/faq.md rename to src/docs/faq.md diff --git a/src/docs/master/gorse-dashboard.md b/src/docs/gorse-dashboard.md similarity index 87% rename from src/docs/master/gorse-dashboard.md rename to src/docs/gorse-dashboard.md index 6bb7f4c..2400d52 100644 --- a/src/docs/master/gorse-dashboard.md +++ b/src/docs/gorse-dashboard.md @@ -32,50 +32,50 @@ dashboard_password = "" After setting a username and password, you will be redirected to the login page the first time you access the dashboard. ::: center -![](../../img/dashboard-login.png =x300) +![](../img/dashboard-login.png =x300) ::: ## Overview The top part of the overview page shows the number of users, items, feedback, valid positive feedback and valid negative feedback in Gorse. The middle part of the overview page shows the proportion of each positive feedback given by users over time, and the curve of the corresponding feedback can be hidden by clicking on the feedback type label. The bottom part of the overview page shows the popular items and the latest items in the system, as well as other status in the system. -![](../../img/dashboard-overview.png) +![](../img/dashboard-overview.png) ## Tasks The task page displays the tasks in Gorse, including the task name, task status, task start time, task end time, and task progress. -![](../../img/dashboard-tasks.png) +![](../img/dashboard-tasks.png) ## Cluster The cluster page lists nodes in the cluster. -![](../../img/dashboard-cluster.png) +![](../img/dashboard-cluster.png) ## Users The user page lists all users currently present in Gorse and can be searched by user ID. The information displayed includes the user ID, user labels, last active time and last update time of the recommendation. -![](../../img/dashboard-users.png) +![](../img/dashboard-users.png) Click on "Neighbors" to see similar users of this user. -![](../../img/dashboard-similar-users.png) +![](../img/dashboard-similar-users.png) Click on "Insight" to see the user's history and the recommendations Gorse has generated for this user. -![](../../img/dashboard-user-insight.png) +![](../img/dashboard-user-insight.png) ## Items The item page lists all items currently in Gorse and can be searched by item ID. The information displayed includes the item ID, item categories, whether it is hidden or not, timestamp, item labels and item description. -![](../../img/dashboard-items.png) +![](../img/dashboard-items.png) Click on "Neighbors" to see the similar items for each item. -![](../../img/dashboard-similar-items.png) +![](../img/dashboard-similar-items.png) ## Data Export and Import @@ -84,22 +84,22 @@ The advanced page allows importing and exporting data. - The "Export Items" button exports items to a CSV file with the format of item ID, hidden or not, item categories, timestamp, item labels and item description. - The "Export Feedback" button exports feedbacks to a CSV file in the format of feedback type, user ID, item ID and timestamp. -![](../../img/dashboard-advance.png) +![](../img/dashboard-advance.png) - The "Import Users" button allows you to enter the "Import Users" page and preview the imported data after selecting the file. You can set the field separator, label separator, the mapping of each field and the existence of the header row. Once the settings are correct, you can click "Confirm Import" to complete the data import. -![](../../img/dashboard-import-users.png) +![](../img/dashboard-import-users.png) - The "Import Items" button allows you to enter the "Import Items" page, which operates with the same logic as the "Import Users" page. -![](../../img/dashboard-import-items.png) +![](../img/dashboard-import-items.png) - The "Import Feedback" button allows you to enter the "Import Feedback" page, with the same logic as for importing users. -![](../../img/dashboard-import-feedback.png) +![](../img/dashboard-import-feedback.png) ## Configurations The settings page shows the configurations currently used by Gorse. The configurations used by the system are determined by a combination of the configuration file, command line options, and environment variables, so there may be differences between the configurations seen on the settings page and the configuration file used. -![](../../img/dashboard-settings.png) +![](../img/dashboard-settings.png) diff --git a/src/docs/master/README.md b/src/docs/master/README.md deleted file mode 100644 index 7c10863..0000000 --- a/src/docs/master/README.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Documentation -icon: explore ---- - -Welcome to the official documents for the Gorse recommender system. - - - -## Table of Contents - -- [Quick Start](quick-start.md) -- Deploy - - [Binary Deployment](deploy/binary.md) - - [Docker Deployment](deploy/docker.md) - - [Kubernetes Deployment](deploy/kubernetes.md) -- [Configuration](config.md) -- Concepts - - [Data Objects](concepts/data-objects.md) - - [Algorithms](concepts/algorithms.md) - - [Non-personalized Recommenders](concepts/non-personalized.md) - - [Item-to-Item Recommenders](concepts/item-to-item.md) - - [External Recommenders](concepts/external.md) - - [How It Works](concepts/how-it-works.md) - - [Evaluation](concepts/evaluation.md) -- API - - [RESTful API](api/restful-api.md) - - [Go SDK](api/go-sdk.md) - - [Python SDK](api/python-sdk.md) - - [TypeScript SDK](api/typescript-sdk.md) - - [Java SDK](api/java-sdk.md) - - [Rust SDK](api/rust-sdk.md) - - [PHP SDK](api/php-sdk.md) - - [Ruby SDK](api/ruby-sdk.md) - - [.NET SDK](api/dotnet-sdk.md) -- [Gorse Dashboard](gorse-dashboard.md) -- [Benchmark](benchmark.md) -- [Contribution Guide](contribution-guide.md) -- [FAQ](faq.md) - -## Contributing Guide - -You can start from any one of the following items to help improve Gorse documents: - -- Fix typos or format (punctuation, space, indentation, code block, etc.) -- Fix or update inappropriate or outdated descriptions -- Add missing content (sentence, paragraph, or a new document) -- [Translate docs changes from English to Chinese](https://gitlocalize.com/repo/8172/zh?utm_source=badge) diff --git a/src/docs/master/VERSION.md b/src/docs/master/VERSION.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/docs/master/sidebar.json b/src/docs/master/sidebar.json deleted file mode 100644 index 89c8c15..0000000 --- a/src/docs/master/sidebar.json +++ /dev/null @@ -1,75 +0,0 @@ -[ - { - "text": "Quick Start", - "icon": "launch", - "link": "quick-start" - }, - { - "text": "Deploy", - "icon": "start", - "collapsible": true, - "prefix": "deploy/", - "children": [ - "binary", - "docker", - "kubernetes" - ] - }, - { - "text": "Configuration", - "icon": "config_s", - "link": "config" - }, - { - "text": "Concepts", - "icon": "idea", - "collapsible": true, - "prefix": "concepts/", - "children": [ - "data-objects", - "algorithms", - "non-personalized", - "item-to-item", - "external", - "how-it-works", - "evaluation" - ] - }, - { - "text": "API", - "icon": "api", - "collapsible": true, - "prefix": "api/", - "children": [ - "restful-api", - "go-sdk", - "python-sdk", - "typescript-sdk", - "java-sdk", - "rust-sdk", - "php-sdk", - "ruby-sdk", - "dotnet-sdk" - ] - }, - { - "text": "Gorse Dashboard", - "icon": "dashboard", - "link": "gorse-dashboard" - }, - { - "text": "Benchmark", - "icon": "dashboard-fill", - "link": "benchmark/" - }, - { - "text": "Contribution Guide", - "icon": "pullrequest", - "link": "contribution-guide/" - }, - { - "text": "FAQ", - "icon": "faq", - "link": "faq/" - } -] \ No newline at end of file diff --git a/src/docs/master/quick-start.md b/src/docs/quick-start.md similarity index 98% rename from src/docs/master/quick-start.md rename to src/docs/quick-start.md index ced85f2..0e53b87 100644 --- a/src/docs/master/quick-start.md +++ b/src/docs/quick-start.md @@ -125,11 +125,11 @@ Gorse generate recommendations for users after feedbacks from users are inserted Open [http://127.0.0.1:8088](http://127.0.0.1:8088) in browser and the dashboard summarizes all status and data in Gorse. -![](../../img/dashboard-overview.png) +![](../img/dashboard-overview.png) Wait for all tasks *except "Searching collaborative filtering model" and "Searching click-through prediction model"* completed. -![](../../img/dashboard-tasks.png) +![](../img/dashboard-tasks.png) Suppose Bob is a frontend developers who starred several frontend repositories in GitHub. We insert his star feedback to Gorse via the RESTful API. diff --git a/src/zh/README.md b/src/zh/README.md index 07086a5..2bc0340 100644 --- a/src/zh/README.md +++ b/src/zh/README.md @@ -7,7 +7,7 @@ heroText: Gorse tagline: 一个使用Go语言开发的开源推荐系统。 actions: - text: 文档 - link: /zh/docs/master/ + link: /zh/docs/ type: primary - text: 在线示例 link: "https://gitrec.gorse.io" diff --git a/src/zh/docs/.gitignore b/src/zh/docs/.gitignore deleted file mode 100644 index 1dbfde8..0000000 --- a/src/zh/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*/ -!master diff --git a/src/zh/docs/README.md b/src/zh/docs/README.md index e69de29..3767201 100644 --- a/src/zh/docs/README.md +++ b/src/zh/docs/README.md @@ -0,0 +1,43 @@ +--- +title: 文档 +icon: explore +--- + +欢迎阅读 Gorse 推荐系统官方文档。 + +## 目录 + +- [快速上手](quick-start.md) +- 部署 + - [二进制部署](deploy/binary.md) + - [Docker 部署](deploy/docker.md) + - [Kubernetes 部署](deploy/kubernetes.md) +- [配置项](config.md) +- 概念详解 + - [数据对象](concepts/data-objects.md) + - [推荐算法](concepts/algorithms.md) + - [推荐流程](concepts/how-it-works.md) + - [效果评估](concepts/evaluation.md) +- API + - [RESTful API](api/restful-api.md) + - [Go SDK](api/go-sdk.md) + - [Python SDK](api/python-sdk.md) + - [TypeScript SDK](api/typescript-sdk.md) + - [Java SDK](api/java-sdk.md) + - [Rust SDK](api/rust-sdk.md) + - [PHP SDK](api/php-sdk.md) + - [Ruby SDK](api/ruby-sdk.md) + - [.NET SDK](api/dotnet-sdk.md) +- [Gorse 控制台](gorse-dashboard.md) +- [性能对比](benchmark.md) +- [贡献指南](contribution-guide.md) +- [常见问题](faq.md) + +## 贡献指南 + +您可以从以下任何一项开始帮助改进 Gorse 文档: + +- 修复拼写错误或格式(标点符号、空格、缩进、代码块等) +- 修复或更新不适当或过时的描述 +- 添加缺失的内容(句子、段落或新文档) +- [翻译英文文档为中文](https://gitlocalize.com/repo/8172/zh?utm_source=badge) diff --git a/src/zh/docs/master/api/README.md b/src/zh/docs/api/README.md similarity index 100% rename from src/zh/docs/master/api/README.md rename to src/zh/docs/api/README.md diff --git a/src/zh/docs/master/api/apidocs.md b/src/zh/docs/api/apidocs.md similarity index 100% rename from src/zh/docs/master/api/apidocs.md rename to src/zh/docs/api/apidocs.md diff --git a/src/zh/docs/master/api/dotnet-sdk.md b/src/zh/docs/api/dotnet-sdk.md similarity index 100% rename from src/zh/docs/master/api/dotnet-sdk.md rename to src/zh/docs/api/dotnet-sdk.md diff --git a/src/zh/docs/master/api/go-sdk.md b/src/zh/docs/api/go-sdk.md similarity index 100% rename from src/zh/docs/master/api/go-sdk.md rename to src/zh/docs/api/go-sdk.md diff --git a/src/zh/docs/master/api/java-sdk.md b/src/zh/docs/api/java-sdk.md similarity index 100% rename from src/zh/docs/master/api/java-sdk.md rename to src/zh/docs/api/java-sdk.md diff --git a/src/zh/docs/master/api/php-sdk.md b/src/zh/docs/api/php-sdk.md similarity index 100% rename from src/zh/docs/master/api/php-sdk.md rename to src/zh/docs/api/php-sdk.md diff --git a/src/zh/docs/master/api/python-sdk.md b/src/zh/docs/api/python-sdk.md similarity index 100% rename from src/zh/docs/master/api/python-sdk.md rename to src/zh/docs/api/python-sdk.md diff --git a/src/zh/docs/master/api/restful-api.md b/src/zh/docs/api/restful-api.md similarity index 100% rename from src/zh/docs/master/api/restful-api.md rename to src/zh/docs/api/restful-api.md diff --git a/src/zh/docs/master/api/ruby-sdk.md b/src/zh/docs/api/ruby-sdk.md similarity index 100% rename from src/zh/docs/master/api/ruby-sdk.md rename to src/zh/docs/api/ruby-sdk.md diff --git a/src/zh/docs/master/api/rust-sdk.md b/src/zh/docs/api/rust-sdk.md similarity index 100% rename from src/zh/docs/master/api/rust-sdk.md rename to src/zh/docs/api/rust-sdk.md diff --git a/src/zh/docs/master/api/typescript-sdk.md b/src/zh/docs/api/typescript-sdk.md similarity index 100% rename from src/zh/docs/master/api/typescript-sdk.md rename to src/zh/docs/api/typescript-sdk.md diff --git a/src/zh/docs/master/benchmark.md b/src/zh/docs/benchmark.md similarity index 100% rename from src/zh/docs/master/benchmark.md rename to src/zh/docs/benchmark.md diff --git a/src/zh/docs/master/concepts/README.md b/src/zh/docs/concepts/README.md similarity index 100% rename from src/zh/docs/master/concepts/README.md rename to src/zh/docs/concepts/README.md diff --git a/src/zh/docs/master/concepts/algorithms.md b/src/zh/docs/concepts/algorithms.md similarity index 100% rename from src/zh/docs/master/concepts/algorithms.md rename to src/zh/docs/concepts/algorithms.md diff --git a/src/zh/docs/master/concepts/data-objects.md b/src/zh/docs/concepts/data-objects.md similarity index 98% rename from src/zh/docs/master/concepts/data-objects.md rename to src/zh/docs/concepts/data-objects.md index b755d25..6388271 100644 --- a/src/zh/docs/master/concepts/data-objects.md +++ b/src/zh/docs/concepts/data-objects.md @@ -65,7 +65,7 @@ item_ttl = 0 多品类推荐很常见,以YouTube为例,首页提供多个主题推荐。 -![](../../../../img/youtube-topics.png) +![](../../../img/youtube-topics.png) 物品品类可以根据主题区分,例如美食、旅游等,也可以根据形式区分,例如直播、短视频和长视频。物品除了出现在全局推荐流中外,`Categories`字段决定了物品应出现在哪些品类推荐流中。对于每个推荐 API,都有一个全局推荐版本和一个品类推荐版本: @@ -82,7 +82,7 @@ item_ttl = 0 例如,对于羽毛球比赛直播,您可以将其`Categories`设置为“直播”和“体育”。这样,除了默认的推荐流之外,用户还可以在“直播”和“体育”推荐类别中找到直播流。 -![](../../../../img/youtube-live.png) +![](../../../img/youtube-live.png) ::: warning @@ -171,7 +171,7 @@ curl -X POST "http://127.0.0.1:8088/api/feedback" \ ::: center -![](../../../../img/tiktok.jpg =300x) ![](../../../../img/youtube-mobile.jpg =300x) +![](../../../img/tiktok.jpg =300x) ![](../../../img/youtube-mobile.jpg =300x) ::: diff --git a/src/zh/docs/master/concepts/evaluation.md b/src/zh/docs/concepts/evaluation.md similarity index 94% rename from src/zh/docs/master/concepts/evaluation.md rename to src/zh/docs/concepts/evaluation.md index 88d7a91..26b8f2f 100644 --- a/src/zh/docs/master/concepts/evaluation.md +++ b/src/zh/docs/concepts/evaluation.md @@ -16,7 +16,7 @@ $$ \text{positive rate}=\frac{1}{|U|}\sum_{i\in |U|}\frac{|R^p_u|}{|R^r_u|} $$ 例如,在[GitRec](https://gitrec.gorse.io/#/)中有两种正反馈类型(“喜欢”和“点赞”)。因此,喜欢率和点赞率显示在控制台的概览页面上。 -![](../../../../img/dashboard-overview.png) +![](../../../img/dashboard-overview.png) ## 离线评估 @@ -60,7 +60,7 @@ $$ \text{recall@n}=\frac{|\text{索引搜索得到的top n}|}{|\text{暴力搜 索引的召回率在仪表板主页的“系统状态”部分可以查看。 -![](../../../../img/evaluation-neighbor-index-recall.jpeg =400x) ![](../../../../img/evaluation-mf-index-recall.jpeg =400x) +![](../../../img/evaluation-neighbor-index-recall.jpeg =400x) ![](../../../img/evaluation-mf-index-recall.jpeg =400x) 如果某个索引的召回率极低,请考虑关闭该索引。 diff --git a/src/zh/docs/master/concepts/how-it-works.md b/src/zh/docs/concepts/how-it-works.md similarity index 96% rename from src/zh/docs/master/concepts/how-it-works.md rename to src/zh/docs/concepts/how-it-works.md index 83137ff..89297ab 100644 --- a/src/zh/docs/master/concepts/how-it-works.md +++ b/src/zh/docs/concepts/how-it-works.md @@ -68,7 +68,7 @@ Gorse 像瀑布一样工作。用户、物品和反馈是水的源头。中间 ::: center -[![](../../../../img/waterfall.jpeg =500x)](https://www.google.com.hk/maps/place/9494%2B2XX+Sanzhe+Pujingqu,+Xueshi+Rd,+Yueqing,+Wenzhou,+Zhejiang,+China,+325613/@28.367624,121.1074902,17z/data=!4m14!1m7!3m6!1s0x344fb1c336f6089f:0x289b31d5bd3c5903!2zQ2hpbmEsIFpoZWppYW5nLCBXZW56aG91LCBZdWVxaW5nLCDpm4HojaHplYfkuInmipjngJE!8m2!3d28.372423!4d121.091304!16s%2Fg%2F1tlqmqj3!3m5!1s0x344fb1be99ca855b:0x1d80848a11ae084d!8m2!3d28.367624!4d121.1074902!16s%2Fg%2F1tm8bqtb) +[![](../../../img/waterfall.jpeg =500x)](https://www.google.com.hk/maps/place/9494%2B2XX+Sanzhe+Pujingqu,+Xueshi+Rd,+Yueqing,+Wenzhou,+Zhejiang,+China,+325613/@28.367624,121.1074902,17z/data=!4m14!1m7!3m6!1s0x344fb1c336f6089f:0x289b31d5bd3c5903!2zQ2hpbmEsIFpoZWppYW5nLCBXZW56aG91LCBZdWVxaW5nLCDpm4HojaHplYfkuInmipjngJE!8m2!3d28.372423!4d121.091304!16s%2Fg%2F1tlqmqj3!3m5!1s0x344fb1be99ca855b:0x1d80848a11ae084d!8m2!3d28.367624!4d121.1074902!16s%2Fg%2F1tm8bqtb) ::: diff --git a/src/zh/docs/master/config.md b/src/zh/docs/config.md similarity index 100% rename from src/zh/docs/master/config.md rename to src/zh/docs/config.md diff --git a/src/zh/docs/master/contribution-guide.md b/src/zh/docs/contribution-guide.md similarity index 100% rename from src/zh/docs/master/contribution-guide.md rename to src/zh/docs/contribution-guide.md diff --git a/src/zh/docs/master/deploy/README.md b/src/zh/docs/deploy/README.md similarity index 100% rename from src/zh/docs/master/deploy/README.md rename to src/zh/docs/deploy/README.md diff --git a/src/zh/docs/master/deploy/binary.md b/src/zh/docs/deploy/binary.md similarity index 100% rename from src/zh/docs/master/deploy/binary.md rename to src/zh/docs/deploy/binary.md diff --git a/src/zh/docs/master/deploy/docker.md b/src/zh/docs/deploy/docker.md similarity index 100% rename from src/zh/docs/master/deploy/docker.md rename to src/zh/docs/deploy/docker.md diff --git a/src/zh/docs/master/deploy/kubernetes.md b/src/zh/docs/deploy/kubernetes.md similarity index 100% rename from src/zh/docs/master/deploy/kubernetes.md rename to src/zh/docs/deploy/kubernetes.md diff --git a/src/zh/docs/master/faq.md b/src/zh/docs/faq.md similarity index 100% rename from src/zh/docs/master/faq.md rename to src/zh/docs/faq.md diff --git a/src/zh/docs/master/gorse-dashboard.md b/src/zh/docs/gorse-dashboard.md similarity index 83% rename from src/zh/docs/master/gorse-dashboard.md rename to src/zh/docs/gorse-dashboard.md index b02941d..627c18f 100644 --- a/src/zh/docs/master/gorse-dashboard.md +++ b/src/zh/docs/gorse-dashboard.md @@ -19,50 +19,50 @@ dashboard_password = "" 设置用户名和密码后,您将在第一次访问控制台时被重定向到登录页面。 ::: center -![](../../../img/dashboard-login.png =x300) +![](../../img/dashboard-login.png =x300) ::: ## 概述页 概览页面的顶部显示了 Gorse 中的用户数、物品数、反馈数、有效正反馈和有效负反馈。概览页面的中间部分显示了用户在一段时间内给出的每种正面反馈的比例变化,点击反馈类型标签可以隐藏相应曲线。总览页面底部显示系统中的热门物品和最新物品,以及系统中的其他状态。 -![](../../../img/dashboard-overview.png) +![](../../img/dashboard-overview.png) ## 任务页 任务页面显示 Gorse 中的任务,包括任务名称、任务状态、任务开始时间、任务结束时间和任务进度。 -![](../../../img/dashboard-tasks.png) +![](../../img/dashboard-tasks.png) ## 集群页 集群页面列出集群中的节点。 -![](../../../img/dashboard-cluster.png) +![](../../img/dashboard-cluster.png) ## 用户页 用户页面列出了 Gorse 当前存在的所有用户,可以通过用户 ID 进行搜索。显示的信息包括用户ID、用户标签、最后活跃时间和推荐的最后更新时间。 -![](../../../img/dashboard-users.png) +![](../../img/dashboard-users.png) 点击“Neighbors”按钮可以查看与该用户相似的用户。 -![](../../../img/dashboard-similar-users.png) +![](../../img/dashboard-similar-users.png) 点击“Insight”按钮可查看用户的历史记录以及 Gorse 为该用户生成的推荐。 -![](../../../img/dashboard-user-insight.png) +![](../../img/dashboard-user-insight.png) ## 物品页 物品页面列出了目前 Gorse 中的所有物品,可以通过物品ID进行搜索。显示的信息包括物品ID、物品类别、是否隐藏、时间戳、物品标签和物品描述。 -![](../../../img/dashboard-items.png) +![](../../img/dashboard-items.png) 点击“Neighbors”按钮以查看每个物品的相似物品。 -![](../../../img/dashboard-similar-items.png) +![](../../img/dashboard-similar-items.png) ## 数据导出和导入页 @@ -72,22 +72,22 @@ dashboard_password = "" - “Export Items”按钮将物品导出到 CSV 文件,格式为物品 ID、隐藏与否、物品类别、时间戳、物品标签和物品描述。 - “Export Feedback”按钮以反馈类型、用户 ID、物品 ID 和时间戳的格式将反馈导出到 CSV 文件。 -![](../../../img/dashboard-advance.png) +![](../../img/dashboard-advance.png) - 点击“Import Users”按钮进入导入用户页面并预览导入的数据。您可以设置字段分隔符、标签分隔符、每个字段的映射以及标题行是否存在。设置无误后,点击“Confirm Import”即可完成数据导入。 -![](../../../img/dashboard-import-users.png) +![](../../img/dashboard-import-users.png) - 点击“Import Items”按钮进入导入物品页面,其操作逻辑与导入用户页面相同。 -![](../../../img/dashboard-import-items.png) +![](../../img/dashboard-import-items.png) - 点击“Import Feedback”按钮进入导入反馈页面,其逻辑与导入用户相同。 -![](../../../img/dashboard-import-feedback.png) +![](../../img/dashboard-import-feedback.png) ## 配置页 配置页面显示了 Gorse 当前使用的配置。系统使用的配置是由配置文件、命令行选项和环境变量共同决定的,因此在设置页面看到的配置和使用的配置文件可能存在差异。 -![](../../../img/dashboard-settings.png) +![](../../img/dashboard-settings.png) diff --git a/src/zh/docs/master/README.md b/src/zh/docs/master/README.md deleted file mode 100644 index d5969b5..0000000 --- a/src/zh/docs/master/README.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: 文档 -icon: explore ---- - -欢迎阅读 Gorse 推荐系统官方文档。 - - - -## 目录 - -- [快速上手](quick-start.md) -- 部署 - - [二进制部署](deploy/binary.md) - - [Docker 部署](deploy/docker.md) - - [Kubernetes 部署](deploy/kubernetes.md) -- [配置项](config.md) -- 概念详解 - - [数据对象](concepts/data-objects.md) - - [推荐算法](concepts/algorithms.md) - - [推荐流程](concepts/how-it-works.md) - - [效果评估](concepts/evaluation.md) -- API - - [RESTful API](api/restful-api.md) - - [Go SDK](api/go-sdk.md) - - [Python SDK](api/python-sdk.md) - - [TypeScript SDK](api/typescript-sdk.md) - - [Java SDK](api/java-sdk.md) - - [Rust SDK](api/rust-sdk.md) - - [PHP SDK](api/php-sdk.md) - - [Ruby SDK](api/ruby-sdk.md) - - [.NET SDK](api/dotnet-sdk.md) -- [Gorse 控制台](gorse-dashboard.md) -- [性能对比](benchmark.md) -- [贡献指南](contribution-guide.md) -- [常见问题](faq.md) - -## 贡献指南 - -您可以从以下任何一项开始帮助改进 Gorse 文档: - -- 修复拼写错误或格式(标点符号、空格、缩进、代码块等) -- 修复或更新不适当或过时的描述 -- 添加缺失的内容(句子、段落或新文档) -- [翻译英文文档为中文](https://gitlocalize.com/repo/8172/zh?utm_source=badge) diff --git a/src/zh/docs/master/VERSION.md b/src/zh/docs/master/VERSION.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/zh/docs/master/sidebar.json b/src/zh/docs/master/sidebar.json deleted file mode 100644 index 7dd9166..0000000 --- a/src/zh/docs/master/sidebar.json +++ /dev/null @@ -1,72 +0,0 @@ -[ - { - "text": "快速上手", - "icon": "launch", - "link": "quick-start" - }, - { - "text": "部署", - "icon": "start", - "collapsible": true, - "prefix": "deploy/", - "children": [ - "binary", - "docker", - "kubernetes" - ] - }, - { - "text": "配置项", - "icon": "config_s", - "link": "config" - }, - { - "text": "概念详解", - "icon": "idea", - "collapsible": true, - "prefix": "concepts/", - "children": [ - "data-objects", - "algorithms", - "how-it-works", - "evaluation" - ] - }, - { - "text": "接口文档", - "icon": "api", - "prefix": "api/", - "collapsible": true, - "children": [ - "restful-api", - "go-sdk", - "python-sdk", - "typescript-sdk", - "java-sdk", - "rust-sdk", - "php-sdk", - "ruby-sdk", - "dotnet-sdk" - ] - }, - { - "text": "Gorse 控制台", - "icon": "dashboard", - "link": "gorse-dashboard" - }, - { - "text": "性能对比", - "icon": "dashboard-fill", - "link": "benchmark/" - }, - { - "text": "贡献指南", - "icon": "pullrequest", - "link": "contribution-guide/" - }, - { - "text": "常见问题", - "icon": "faq", - "link": "faq/" - } -] \ No newline at end of file diff --git a/src/zh/docs/master/quick-start.md b/src/zh/docs/quick-start.md similarity index 98% rename from src/zh/docs/master/quick-start.md rename to src/zh/docs/quick-start.md index 71b52d6..a7e1bec 100644 --- a/src/zh/docs/master/quick-start.md +++ b/src/zh/docs/quick-start.md @@ -126,11 +126,11 @@ Restarting gorse_worker_1 ... done 在浏览器中打开[http://127.0.0.1:8088](http://127.0.0.1:8088) ,仪表盘汇总了 Gorse 中的所有状态和数据。 -![](../../../img/dashboard-overview.png) +![](../../img/dashboard-overview.png) 等待*除了“Searching collaborative filtering model”和“Searching click-through prediction model”外*的所有任务完成。 -![](../../../img/dashboard-tasks.png) +![](../../img/dashboard-tasks.png) 假设 Bob 是一名前端开发人员,他在 GitHub 中点赞过为多个前端仓库。我们通过 RESTful API 将他的点赞插入 Gorse。 diff --git a/src/zh/posts/github-recommender-system.md b/src/zh/posts/github-recommender-system.md new file mode 100644 index 0000000..f27b05e --- /dev/null +++ b/src/zh/posts/github-recommender-system.md @@ -0,0 +1,12 @@ +--- +icon: github-fill +date: 2025-09-01 +category: + - 用户案例 +tag: + - GitHub +--- + +# 基于Gorse 0.5重构GitHub仓库推荐系统 + +[GitRec](https://github.com/gorse-io/gitrec)是Gorse推荐系统的官方演示网站,用于展示Gorse推荐系统的基本能力。根据用户点赞记录向用户推荐GitHub仓库,使用浏览器插件还能展示每个GitHub仓库的相似仓库。但是随着Gorse推荐系统的迭代,是时候对GitRec进行一次重构,从而更好地利用Gorse 0.5的新特性了。 diff --git a/vercel.json b/vercel.json deleted file mode 100644 index ad258d6..0000000 --- a/vercel.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "github": { - "silent": true - } -} \ No newline at end of file