3

音楽プレイリスト専用の検索アプリケーションを作成しています。

ジャンルやファイル形式はプレイリストごとに異なり、プレイリスト内でも異なる場合があります。「同義」タグの概念もあります (たとえば、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

また、期間なども組み込みます。

4

4 に答える 4

2

検索用にデータを構造化する方法を考えすぎると、アプリで実際に使用できたはずの重要な検索を見逃す可能性が高くなります。

あるいは (これは経験によるものです)、あらゆる種類のインデックス作成手法を再発明することになります。

私は lucene でいくつかの経験があります (Java と .net バージョンがあり、C ポートがありましたが、最近どれだけ生きているかはわかりません) - どんな構造にも格納されているデータで驚くべきことを行うことができます。

私はソファ db の外観が好きですが、新しい強力なものをどれだけ試したいか、または (現在) かなり強化されたもの (lucene) を使用するかによって異なります。

于 2008-10-09T01:50:19.427 に答える
1

A fulltext index will serve you best if your users are going to be the ones defining the queries. Just create a custom text field that describes each attribute you want to be searchable e.g. "urban filetype:pdf gospel" and search that.

于 2008-10-12T20:14:35.787 に答える
0

OK、ここでブレインストーミングします-

おそらく、8進数または2進数を使用して、「フォーマット」タイプをビットマスクとして格納しますか?

http://www.nitrogen.za.org/viewtutorial.asp?id=17

RandB:1ヒップホップ:2ゴスペル:4アーバン:8

さて、これらのものは相加的です。何かがUrbanとタグ付けされている場合、フラグフィールドに「8」を格納することはありませんが、11 ... Urban && HipHop&&RandBを格納することを知っています。これは、どこかで詳しく説明しなければならない「ビジネスインテリジェンス」のほんの一部です。

次に、バイナリ比較を使用して、探しているフラグを特定できます。

于 2008-10-09T13:17:48.200 に答える
-1

あなたのソリューションでデータベース ソフトウェアがどのような役割を果たすかわかりません。

私がこれを実装するのであれば、まず、関連するすべてのデータが正規化された方法でキャプチャされるようにします。これには、カテゴリ、アートワーク、歌詞などが含まれます。

これの主な利点は、「複雑な」検索のアイデアが実際には非常に単純になることです。

于 2008-10-09T01:55:15.283 に答える