Ответ 1
Хорошая начальная точка учебника здесь.
Но, наконец, имея необходимость использовать составной компонент и пытаться писать запросы к данным, я понял несколько вещей, которые хотел бы разделить.
При поиске столбцов Composite результаты будут смежным блоком столбцов.
Итак, предполагая s-композицию из 3 строк, а мои столбцы выглядят следующим образом:
A:A:A
A:B:B
A:B:C
A:C:B
B:A:A
B:B:A
B:B:B
C:A:B
Для поиска от A: A: от A до B: B: B результаты будут
A:A:A
A:B:B
A:B:C
A:C:B
B:A:A
B:B:A
B:B:B
Обратите внимание на компоненты "C"? В начальных и конечных условиях нет компонентов "С"! что дает? Это все результаты между столбцами A: A: A и B: B: B. Сложные поисковые термины не дают результаты, как будто обработка вложенных циклов (это то, что я изначально думал), а скорее, поскольку столбцы отсортированы, вы указываете начальные и конечные термины для смежных блок столбцов.
При создании композитных записей поиска необходимо указать ComponentEquality
Только последний термин должен быть GREATER_THAN_EQUAL, все остальные должны быть EQUAL. например для выше
Composite start = new Composite();
start.addComponent(0, "A", Composite.ComponentEquality.EQUAL);
start.addComponent(1, "A", Composite.ComponentEquality.EQUAL);
start.addComponent(2, "A", Composite.ComponentEquality.EQUAL);
Composite end = new Composite();
end.addComponent(0, "B", Composite.ComponentEquality.EQUAL);
end.addComponent(1, "B", Composite.ComponentEquality.EQUAL);
end.addComponent(2, "B", Composite.ComponentEquality.GREATER_THAN_EQUAL);
SliceQuery<String, Composite, String> sliceQuery = HFactory.createSliceQuery(keyspace, se, ce, se);
sliceQuery.setColumnFamily("CF").setKey(myKey);
ColumnSliceIterator<String, Composite, String> csIterator = new ColumnSliceIterator<String, Composite, String>(sliceQuery, start, end, false);
while (csIterator.hasNext()) ....