Я пишу поисковое приложение специально для музыкальных плейлистов.
Жанр и формат файла отличаются от списка воспроизведения к списку воспроизведения, и иногда в списке воспроизведения также есть различия. Существует также концепция «синонимичных» тегов (например, городской будет охватывать как хип-хоп, так и R & B, но не наоборот).
Ниже приведен список поисковых запросов и ожидаемых результатов.
Евангелие: должно вернуть все плейлисты хотя бы с одной евангельской песней. Сначала будут показаны плейлисты со всеми евангельскими песнями.
Городские: должны вернуть все R & B и хип-хоп. снова плейлисты со всеми городскими треками будут на первом месте.
хип-хоп: должен вернуть все хип-хоп, но не r & b.
flac: должен возвращать все списки воспроизведения, которые содержат файлы flac. начиная с тех, которые являются чистыми flac.
Хип-хоп флак: сначала должен вернуть хип-хоп флаки, а затем другой хип-хоп аудио
хип-хоп и флак: должны возвращать только хип-хоп флаки
хип-хоп аудио: должен возвращать хип-хоп флаки, хип-хоп mp3-файлы и т. д.
Поскольку я только начинаю этот проект, я думаю о лучшем способе проиндексировать все это. Будет ли здесь полезен полнотекстовый поиск, такой как Lucene? Примечание. У меня нет текста, описывающего эти списки воспроизведения, но я мог бы сгенерировать его.
Я подумываю организовать все эти термины как «теги» и сохранить их в базе данных «многие ко многим».
таблица: список воспроизведения (pk (id), desc)
таблица: тег (pk (id), desc)
таблица: playlist_has_tag (pk (link_id, tag_id))
Чтобы решить городской == хип-хоп || Я хотел бы добавить таблицу tag_synonyms:
таблица: tag_synonyms (pk (tag_id, synonym_tag_id))
Тогда у меня было бы две записи, указывающие, что город включает в себя хип-хоп и рнб:
городской идентификатор тэга, тэг хип-хопа
идентификатор городского, идентификатор тега rnb
Я чувствую, что при таком подходе запрос может быть достаточно запутанным.
Может ли CouchDB быть здесь полезен? В настоящее время я использую PostgreSQL. Есть ли какое-нибудь программное обеспечение, которое облегчит подобные вещи?
Я бы хотел иметь возможность в будущем развернуть и поддержать сложные условия поиска, например:
(хип-хоп или дом) И тип файла: mp3 И обложка: нет
А также включать такие вещи, как продолжительность и т. Д.