音楽プレイリスト専用の検索アプリケーションを作成しています。
ジャンルやファイル形式はプレイリストごとに異なり、プレイリスト内でも異なる場合があります。「同義」タグの概念もあります (たとえば、urban はヒップホップと R&B の両方をカバーしますが、その逆はカバーしません)。
以下は、検索用語と期待される結果のリストです。
gospel: 少なくとも 1 つのゴスペル ソングを含むすべてのプレイリストを返す必要があります。すべてのゴスペル ソングを含むプレイリストが最初に表示されます。Urban: すべての R&B と Hiphop を返す必要があります。ここでも、すべてのアーバン トラックを含むプレイリストが最初に表示されます。hiphop: すべてのヒップホップを返しますが、r&b は返しません。flac: flac ファイルを含むすべてのプレイリストを返す必要があります。純粋なflacのものから始めます。hiphop flac: 最初に Hiphop flacs を返し、次に他のヒップホップ オーディオを返す必要があります。 Hiphop AND flac: Hiphop flacs のみを返す必要があります。
このプロジェクトを始めたばかりなので、これらすべてをインデックス化する最善の方法を考えています。Lucene のような全文検索は、ここで役に立ちますか? これらのプレイリストを説明するテキストはありませんが、生成することはできます。
これらすべての用語を「タグ」として整理し、データベースに多対多で格納することを考えています。
テーブル: プレイリスト ( pk(id), desc ) テーブル: タグ ( pk(id), desc ) テーブル: プレイリスト_has_tag ( pk(link_id, tag_id) )
アーバン == ヒップホップを解決するには || rnb 事、私はおそらく tag_synonyms テーブルを追加します:
表: tag_synonyms ( pk(tag_id, synonym_tag_id) )
次に、アーバンがヒップホップと rnb を包含することを示す 2 つのレコードを作成します: アーバンのタグ ID、ヒップホップのタグ ID、アーバンのタグ ID、RNB のタグ ID
このアプローチを使用すると、クエリが非常に複雑になる可能性があると感じています。
ここで CouchDB を使用できますか? 現在PostgreSQLを使用しています。この種のことを簡単にするソフトウェアはありますか?
将来的には、次のような複雑な検索用語を掘り下げてサポートできるようにしたいと考えています。
(ヒップホップ OR ハウス) AND ファイルタイプ:mp3 AND アートワーク:no
また、期間なども組み込みます。