我正在为 Cassandra 开发一个被证明是不可能的解决方案。
我们有一个表格,它将返回一组给定搜索条件的候选人。将得分最高的行返回给用户。我们可以用 SQL 很容易地做到这一点,但是需要迁移到 Cassandra。以下是涉及的表格:
价值
ID | VALUE | COUNTRY | STATE | CITY | COUNTY
--------+---------+----------+----------+-----------+-----------
1 | 50 | US | | |
--------+---------+----------+----------+-----------+-----------
2 | 25 | | TX | |
--------+---------+----------+----------+-----------+-----------
3 | 15 | | | MEMPHIS |
--------+---------+----------+----------+-----------+-----------
4 | 5 | | | | BROWARD
--------+---------+----------+----------+-----------+-----------
5 | 30 | | NY | NYC |
--------+---------+----------+----------+-----------+-----------
6 | 20 | US | | NASHVILLE |
--------+---------+----------+----------+-----------+-----------
计分
ATTRIBUTE | SCORE
-------------+-------------
COUNTRY | 1
STATE | 2
CITY | 4
COUNTY | 8
发送的查询可以填充或不填充这四个属性中的任何一个。我们搜索我们的值表,计算分数,然后返回最高的分数。如果值表中的一列为空,则表示它适用于所有人。
- ID 1 适用于美国境内的所有州、市和县。
- ID 2 适用于州属 TX 的所有国家、市和县。
例子:
Query: {Country: US, State: TX}
Matches Value IDs: [1, 2, 3, 4, 6]
Scores: [1, 2, 4, 8, 5(1+4)]
Result: {id: 4} (8 was the highest score so Broward returns)
你会如何在 Cassandra 2.1 中为这样的东西建模?