gpt4 book ai didi

java - 在 Cassandra IndexExpression 中使用运算符 'or'

转载 作者:行者123 更新时间:2023-11-30 04:35:25 24 4
gpt4 key购买 nike

我有一个带有 Cassandra db 的 Java 应用程序。我正在使用 Cassandra 佩洛普斯。我有一个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。有什么建议么?我希望我说清楚了!提前致谢!

最佳答案

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

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

关于java - 在 Cassandra IndexExpression 中使用运算符 'or',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com