Skip to main content
Gorse

Gorse

An open-source recommender system service written in Go.

DocumentationLive Demo

Multi-source

Recommend items from Popular, latest, user-based, item-based and collaborative filtering.

AutoML

Search the best recommendation model automatically in the background.

Distributed prediction

Support horizontal scaling in the recommendation stage after single node training.

RESTful APIs

Expose RESTful APIs for data CRUD and recommendation requests.

Multi-database support

Support Redis, MySQL, Postgres, MongoDB, and ClickHouse as its storage backend.

Online evaluation

Analyze online recommendation performance from recently inserted feedback.

Dashboard

Provide GUI for data management, system monitoring, and cluster status checking.

Open source

The codebase is released under Apache 2 license and driven by the community.

Gorse is an open-source recommendation system written in Go. Gorse aims to be a universal open-source recommender system that can be easily introduced into a wide variety of online services. By importing items, users and interaction data into Gorse, the system will automatically train models to generate recommendations for each user.

Quick Start

The playground mode has been prepared for beginners. Just set up a recommender system for GitHub repositories by following the commands.

curl -fsSL https://gorse.io/playground | bash

The playground mode will download data from GitRecopen in new window and import it into Gorse. The dashboard is available at http://localhost:8088open in new window.

After the "Find neighbors of items" task is completed on the "Tasks" page, try to insert several feedbacks into Gorse. Suppose Bob is a frontend developer who starred several frontend repositories in GitHub. We insert his star feedback to Gorse.

read -d '' JSON << EOF
[
    { \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"vuejs:vue\", \"Timestamp\": \"2022-02-24\" },
    { \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"d3:d3\", \"Timestamp\": \"2022-02-25\" },
    { \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"dogfalo:materialize\", \"Timestamp\": \"2022-02-26\" },
    { \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"mozilla:pdf.js\", \"Timestamp\": \"2022-02-27\" },
    { \"FeedbackType\": \"star\", \"UserId\": \"bob\", \"ItemId\": \"moment:moment\", \"Timestamp\": \"2022-02-28\" }
]
EOF

curl -X POST http://127.0.0.1:8088/api/feedback \
   -H 'Content-Type: application/json' \
   -d "$JSON"

Then, fetch 10 recommended items from Gorse. We can find that frontend-related repositories are recommended for Bob.

curl http://127.0.0.1:8088/api/recommend/bob?n=10
[
  "mbostock:d3",
  "nt1m:material-framework",
  "mdbootstrap:vue-bootstrap-with-material-design",
  "justice47:f2-vue",
  "10clouds:cyclejs-cookie",
  "academicpages:academicpages.github.io",
  "accenture:alexia",
  "addyosmani:tmi",
  "1wheel:d3-starterkit",
  "acdlite:redux-promise"
]

The exact output might be different from the example since the playground dataset changes over time.