オプションの列にセカンダリ インデックスがあります。
class Sessions extends CassandraTable[ConcreteSessions, Session] {
object matchId extends LongColumn(this) with PartitionKey[Long]
object userId extends OptionalLongColumn(this) with Index[Option[Long]]
...
}
ただし、indexedToQueryColumn
暗黙的な変換はオプションの列には使用できないため、これはコンパイルされません。
def getByUserId(userId: Long): Future[Seq[Session]] = {
select.where(_.userId eqs userId).fetch()
}
これもありません:
select.where(_.userId eqs Some(userId)).fetch()
または、インデックスのタイプを変更します。
object userId extends OptionalLongColumn(this) with Index[Long]
ファントムを使用してそのようなクエリを実行する方法はありますか?
非正規化できることはわかっていますが、非常に厄介なハウスキーピングが必要になり、(かなりの) データ サイズが 3 倍になります。通常、クエリはほんの一握りの結果しか返さないため、この場合はセカンダリ インデックスを使用します。