Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
andrey.dev
7 лет назад

Как правильно разделять контент голоса и другими сервисами использующих блокчейн Голос? Поиск по нескольким тегам?

Разделение контента
Радостно наблюдать, что на проекте появляются
удобные сервисы, предоставляющие дополнительный функционал (например, razumgolosa.com, reviews.steemul.ru).
В голове крутится множество идей по развитию сервисов на платформе голос,
но останавливает невозможность разграничения контента (если я ошибаюсь, поправьте).
Сейчас контент разграничивается тегами, причем, несмотря на возможность указания нескольких тегов, поиск можно вести только по одному. Это создаёт определённые проблемы.
Например, мы хотим сделать сервис оценки кулинарных рецептов на платформе голос. Понятно, что подобный функционал можно реализовать в виде обычных постов, но это будет не очень удобно. Если в рамках отдельного сервиса мы создадим тег #суперрецепт и будем фильтровать контент по нему, мы потеряем возможность использовать теги внутри сервиса. Т.к. нельзя будет одновременно искать(фильтровать) по #суперрецепт + #десерт.
API блокчейна, а именно все функции get_discussions_by_XXX позволяют фильтровать только по 1 тегу, т.е. это ограничение платформы. Несмотря на наличие поля filter_tags, т.к. по сути оно почти нигде не используется(в коде ноды) и фильтрации не происходит(проверено с помощью библиотеки steemjs).
Вот структура discussion_query, которая передаётся в функции в качестве аргумента и единственное упоминание filter_tags в коде функции validate

struct discussion_query {
   void validate()const{
      FC_ASSERT( filter_tags.find(tag) == filter_tags.end() ); // <- единственная проверка filter_tags
      FC_ASSERT( limit <= 100 );
   }

   string           tag;
   uint32_t         limit = 0;
   set<string>      filter_tags;
   optional<string> start_author;
   optional<string> start_permlink;
   optional<string> parent_author;
   optional<string> parent_permlink;
};

Какие я вижу решения?

  1. Самое простое - во все свои теги добавлять корневой тег, т.е.
    #суперрецепт, #суперрецептдесерт, #суперрецептпервое и.т.д
    Но если фильтрацию нужно вести по 3-4 тегам? #суперрецептдесертнапитки ? создавать всевозможные комбинации из тегов... смахивает на нездоровый костыль, хотя если будет фильтрация не больше чем по 2-м тегам, то вполне может быть.
  2. Внести изменения в код ноды голоса, добить недописанный функционал filter_tags. И коннектиться не к wss://ws.golos.io, а к своей ноде. Однако, я не уверен, что такой хитрый вариант сработает.
    В перспективе, если изменения будут действительно хорошими их можно будет добавить в очередной хардфорк, но это именно в перспективе, хотелось мы иметь работающее решение уже сейчас.

Хотелось бы услышать комментарии, особенно по пункту 2 от людей хорошо знакомых с блокчейном. Возможно, есть простой 3-ий вариант, о котором я не догадываюсь.

0
4552.473 GOLOS
На Golos с December 2016
Комментарии (14)
Сортировать по:
Сначала старые