たとえば、eBay (または何か) のようなマーケットプレイスを構築しているとします。
次のようなデータ (疑似コード) を使用します。
public class Item {
Double price;
String geoHash;
Long startAvailabilty; // timestamp
Long endAvailabilty; // timestamp
Set<Keywords> keywords;
String category;
String dateCreated; // iso date
String dateUpdated; // iso date
Integer likes;
Boolean isActive;
}
次のようにアイテムをフィルタリングする「クエリ」を作成したいとします。
アイテムは、フィールド データ (タイトル、価格、タイムスタンプの範囲) といくつかのテキスト (説明) と共に保存されます。次に、以下に基づいてフィルタリングする必要があります。
- 価格帯 (例: 100-200)
- 場所 (例: GeoHash プレフィックスで始まる)
- 指定されたミリ秒のタイムスタンプの間 (たとえば、各レコードには開始日と終了日があります) -- アイテムの有効期間など
- 特定のキーワードがある (各レコードには、保存前に前処理されたキーワードの配列があります)
- 特定のカテゴリがある
- 作成日と更新日がある (これはよくあることです)
- 特定のキーワード テキストがある (これは全文検索であるため、これは実際には不可能だと思います)
そして、以下に基づいて結果を注文したいと思います。
- 最初にいいねの数 (各レコードにはいいねの数が保存されます)
- 最新または最近作成されたものが最初
- まだアクティブです (アクティブかどうかにかかわらず、各レコードにはブール値があります)
上記の特定のクエリを使用して取得できるように、これをどのようにモデル化/キー値データベースに格納する必要がありますか? つまり、スキーマを使用しない (スキーマレス)