假设我正在建立一个像 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 前缀开头)
- 在给定的毫秒时间戳之间(例如,每条记录都有一个开始和结束日期)——例如项目的有效期
- 有一个给定的关键字(每条记录在存储之前都有一个关键字数组)
- 有一个给定的类别
- 有创建日期和更新日期(这很常见)
- 有一个给定的关键字文本(我认为这是不可能的,因为这是一个全文搜索)
我想根据以下内容订购结果:
- 点赞数优先(每条记录存储点赞数)
- 最新或最近创建的第一个
- 仍然处于活动状态(每条记录是否处于活动状态都有一个布尔值)
这应该如何建模/存储在键值数据库中,以便可以使用上面给定的查询来检索它?那就是不使用任何模式(无模式)