次のデータ構造を考慮すると、データベースシステム(rdbmsまたはnosql)に格納されたデータをクエリする方がよいでしょうか。メタデータフィールド内のフィールドはユーザー定義であり、ユーザーごとに異なります。可能な値は、文字列、数値、「日付」、さらには配列です。
var file1 = {
id: 123, name: "mypicture", owner: 1
metadata: {
people: ["Ben", "Tom"],
created: 2013/01/01,
license: "free",
rating: 4
...
},
tags: ["tag1", "tag2", "tag3", "tag4"]
}
var file2 = {
id: 155, name: "otherpicture", owner: 1
metadata: {
people: ["Tom", "Carla"],
created: 2013/02/02,
license: "free",
rating: 4
...
},
tags: ["tag4", "tag5"]
}
var file1OtherUser = {
id: 345, name: "mydocument", owner: 2
metadata: {
autors: ["Mike"],
published: 2013/02/02,
…
},
tags: ["othertag"]
}
ユーザーは、ファイルを検索/フィルタリングできる必要があります。
- ユーザー1:「Tom」が「people」配列にあるすべてのファイルを表示する
- ユーザー1:2013/01/01から2013/02/01の間に「作成された」すべてのファイルを表示する
- ユーザー1:「ライセンス」「無料」および「評価」が大きい2のすべてのファイルを表示
- ユーザー2:「2012」で「公開」され、「重要」でタグ付けされたすべてのファイルを表示
- ..。
結果は、インテリジェントフォルダを使用するOSXで実行できるのと同じ方法でフィルタリングする必要があります。個々のメタデータフィールドは、ファイルがアップロード/保存される前に定義されます。ただし、その後変更される可能性もあります。たとえば、ユーザー1はメタデータフィールドの名前を「people」から「cast」に変更する場合があります。