Схема тегов для CouchDB.Будет ли это работать? - PullRequest
0 голосов
/ 18 октября 2010

Мне интересно, подойдет ли следующий сценарий к CouchDB? Я создаю веб-приложение для карточек. Пользователи могут создавать карточки (вопрос с одной стороны, ответ с другой). Авторы Flashcard и другие пользователи могут пометить карточки с ключевыми словами / фразами. Пользователи могут извлекать / генерировать виртуальные стопки карточек на основе тегов, включая поддержку логического поиска (tagA И tagB НЕ tagC ИЛИ tagD). БД будет хранить карты (очевидно), но также и «документы» для пользователей, теги и потенциально виртуальные стопки карт. Я читал другие вопросы SO, касающиеся тегов в CouchDB, но мне интересно, сработает ли следующее или будет интенсивно писать… (1) Документы карт содержат массив строк JSON тегов, назначенных этой карте, (2) Документы тегов содержат массив карт JSON используя тег, (3) документы тегов также имеют элемент для хранения количества карточек, использующих этот тег, (4) каждый раз, когда создается новая карта или добавляется тег на карту, соответствующий идентификатор карты также добавляется в документ тега и элемент CardCount документа тега увеличивается. (5) Создаются постоянные виды карточек, проиндексированных по идентификатору карточки, и меток, проиндексированных по строке метки. Если я знаю идентификатор карты, я могу быстро найти документ и быстро получить список связанных тегов. Если мне дают строку тега, я могу быстро найти документ тега, а затем получить список идентификаторов карт, используя тег. Для более сложного логического поиска я могу получить список идентификаторов карточек для каждого тега в логическом поиске, а затем выяснить объединение / пересечение / и т.д. этих наборов на клиенте. Это кажется разумным? Мне известно о возможности полнотекстовой индексации с использованием Lucene, но я хотел бы избежать этого, если это возможно. Спасибо.

1 Ответ

1 голос
/ 23 ноября 2010

Я не вижу веской причины усложнять ситуацию - просто создайте документ на карточку и добавляйте теги к этим документам по мере продвижения.Создайте несколько сохраненных представлений для подсчета / показа тегов и номера их использования, когда вам это нужно.

таким образом вам понадобится только:

карточный документ:

ответ на вопростеги []

просмотров:

показывать информацию о карточке показывать (возможно, самые популярные) теги показывать карточки по тегу

Пока ваши документы правильно структурированы, вы не будетенужен полнотекстовый поиск для обработки всего.

...