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 の列があります。リクエストは、この 2 つの日付がある間隔内にあるすべての行を返すことです。完全に間隔内にある必要はありません。重要なのは、この間隔内で開始または終了することです。だから、私はどういうわけか次のようなものを実装する必要があります:

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

IndexExpression を使用して。助言がありますか?私は明確だったと思います!前もって感謝します!

4

1 に答える 1

2

Cassandra は、現時点ではセカンダリ インデックス クエリで論理和 ("or") をサポートしておらず、論理積 ("and") のみをサポートしています。ほとんどの場合、論理和の各半分で 2 つの個別のクエリを作成し、結果を結合するだけで十分です。

ただし、時間範囲を扱っている場合は、セカンダリ インデックスではなく、列名を使用する必要があります。時系列データに関するドキュメントをいくつか確認し、データを再構築して時間範囲に基づく効率的なクエリをサポートする方法を検討することをお勧めします。

于 2012-12-04T01:37:11.243 に答える