1

我有一个带有 Cassandra db 的 Java 应用程序。我正在使用 Cassandra Pelops。我有一个 columnFamily cf1,那里有很多列。对于其中一些,我创建了二级索引,因此我可以使用它们进行搜索。出于搜索目的,我创建了一个 IndexExpression(表达式)列表,例如:

final IndexExpression propertyIdExpression = new IndexExpression(
ByteBuffer.wrap(Bytes.fromUTF8(CassandraIntegrationDAOHelper.COL_PROPERTY_ID).toByteArray()),
                IndexOperator.EQ,
                ByteBuffer.wrap(Bytes.fromInt(entity.getProperty().getId()).toByteArray())
        );
        expressions.add(propertyIdExpression); 

现在我需要包括一些额外的检查。我有列 dateFrom 和 dateTo。请求是返回这两个日期在某个时间间隔内的所有行。它们不必完全在区间内,重要的是在这个区间内开始或结束。所以,我需要以某种方式实现这样的事情:

if( (dateTo is greaterThan intervalStart) or (dateFrom is lowerThan intervalEnd) )

通过使用 IndexExpression。有什么建议么?我希望我很清楚!提前致谢!

4

1 回答 1

2

Cassandra 目前不支持二级索引查询中的析取(“or”),只支持合取(“and”)。在大多数情况下,对分离的每一半进行两个单独的查询并组合结果就足够了。

但是,如果您正在处理时间范围,那么您应该使用列名,而不是二级索引。我建议查看一些有关时间序列数据的文档,并考虑如何重构数据以支持基于时间范围的高效查询。

于 2012-12-04T01:37:11.243 回答