Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

PerfLibNetcracker/gorse

 
 

Repository files navigation

anguage: Russian Perflib | English

Краткое описание как запустить через docker

  1. Конечно же скачать сам докер (с этим возможно могут быть проблемы на винде)
  2. В папке проекта открыть командную строку и ввести: docker build -t gorse-perflib .
  3. После того как оно закончило собирать образ, нужно ввести: docker run -d -p 8050:8050 gorse-perflib. Это запустит приложение на фоне

Чтобы остановить образ: docker image ls, найти "IMAGE_ID" и ввести docker container stop "IMAGE_ID" Если надо будет удалить образ (по каким-либо причинам), то нужно ввести: docker image ls, найти "IMAGE ID" нужного образа и ввести docker image rm "IMAGE_ID" --force

В случае если захочется самому запустить на своей машине это всё дело, можно глянуть в сам докерфайл

Сервис общается только по http протоколу и через json

Обновление модели рекомендации по дефолту идёт раз в 5 секунд, настраивается в конфигах

Эндпоинты:

Сервис на 0.0.0.0 адрес по дефолту (localhost/www), так что сервер может быть даже открытым для интернета, если порты открыты на хосте.

Дефолтный порт: 8050

Все эндпоинты которые выдают что-то имеют параметр number, в котором можно указать кол-во возвращаемого результата К примеру: localhost:8050/popular?number=1 выдаст самый популярный предмет (и только один), если number=2 то первые 2 и т.д

В сервис можно засовывать как и id, так и string имена юзеров/предметов, но feedback (далее будет об этом) принимает только string во всех параметрах. К примеру, нельзя сделать параметр ItemId при добавлении предмета/юзера int-овым, будет ошибка. Скорее всего позже я это пофикшу как будет возможность

Все JSON идут в множественном формате (как принимающие, так и отправляющие), т.е они все оборачиваются в []

Сами эндпоинты:

/popular - возвращает список популярных предметов
/recommends/{user-id} - не требует тела json, требует user-id, возвращает рекомендации для конкретного пользователя

user-id может быть как и строка, так и id, не имеет разницы Формат возвращаемого json:

          {
             "ItemId":"string",
             "Popularity": int, 
             "Timestamp": "instant"
             "Score": int
          }

P.S: Popularity, может быть > 1, пока не уверен что float Timestamp пока что не разобрался зачем нужен, так что лучше игнорьте (формат его: 0001-01-01T00:00:00Z)

Score это число от 0 до 1, float, представляет из себя счёт конкретной рекомендации для конкретного пользователя

/feedback - требует тела json, добавление предметов, юзеров в сервис

Здесь есть одна оссобенность, юзер добавляется сразу вместе с сущностью которую он открыл То есть, нельзя добавлять юзера без сущности Формат добавления через json:

     {
         "UserId":"id",
         "ItemId":"id",
         "Feedback":float,
     }

P.S Feedback может быть больше 0, float'ом и как я понял, если мы говорим о просмотрах пользователя, это кол-во добавляемых просмотров пользователя.

/random - не требует тела json, пока не до конца понял цели этого,

так как оно даёт одинаковые результаты, но оно выдаёт сущности в таком же формате что и рекомендации

/popular - не требует тела json, выдаёт самые популярные предметы (по всем пользователям),

выдаёт результаты в том же формате что и эндпоинт рекомендаций

/users - не требует тела json, выдаёт всех пользователей учтённых в сервисе

формат вывода json:

   [
   	"user1",
   	"user2",
   	"..."
   ]
/user/{user-id}/feedback - получить все вложения в сервис рекомендации от конкретного пользователя

формат вывода json:

    [
         {
             "UserId":"username",
             "ItemId":"id",
             "Rating": int
         }
    ]

P.S Rating и представляет из себя feedback, здесь он выдаётся в формате int

/items - получить все предметы, сохранённые в сервисе рекомендаций

формат вывода json:

    [
             {
                 "ItemId":"id",
                 "Popularity": int,
                 "Timestamp": "instant"
            }
    ]

В сервисе ещё остались парочку эндпоинтов, но думаю для начала хватит и этих

Если понадобятся другие, то можно глянуть на них в файле cmd/rest.go

About

A recommender system service based on collaborative filtering written in Go

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Go 91.4%
  • Assembly 3.5%
  • Python 2.1%
  • Shell 2.0%
  • Other 1.0%