2012-04-20 2 views
3

아래의 행 집합을 사용하여 인덱싱을 만들려고했습니다.Cassandra Hector API에서 보조 인덱스를 프로그래밍 방식으로 생성하는 방법

KeyspaceDefinition fromCluster = cluster.describeKeyspace(KEYSPACE); 
ColumnFamilyDefinition cfDef = fromCluster.getCfDefs().get(0); 
BasicColumnFamilyDefinition columnFamilyDefinition = newBasicColumnFamilyDefinition(cfDef); 
BasicColumnDefinition columnDefinition = new BasicColumnDefinition(); 
columnDefinition.setName(StringSerializer.get().toByteBuffer("A_NO"));  
columnDefinition.setIndexName("A_NO_idx"); 
columnDefinition.setIndexType(ColumnIndexType.KEYS); 
columnDefinition.setValidationClass(ComparatorType.UTF8TYPE.getClassName()); 
columnFamilyDefinition.addColumnDefinition(columnDefinition); 

하지만 그렇게 할 수 없습니다. 실제로 동적으로뿐만 아니라 열을 동적으로 데이터를 저장하는 오전뿐만 아니라 더 나은 쿼리 목적을 위해 일부 특정 열에 인덱스를 넣으려고합니다. 어떤 제안이라도 그렇게하는 방법을 알려주세요.

+0

글쎄, 나는 그 일을하는 방법을 알아 냈습니다. – abhi

답변

5

결국 매우 간단합니다. columnfamily를 정의하면서 보조 색인을 만들어야합니다. 위의 코드에서 모든 조작은 정의하는 동안 작성되어야하는 오브젝트 색인에 대해 수행됩니다. 인덱스를 추가하는 단계는 도우미 메서드 코드는 내가 당신을 도움이되기를 바랍니다 here

을 찾을 수 있습니다 비교 자에 대한 KeyspaceCreationTest

public ColumnDef newIndexedColumnDef(String  column_name, String  comparer){ 
     ColumnDef cd = new ColumnDef(se.toByteBuffer(column_name), comparer); 
     cd.setIndex_name(column_name); 
     cd.setIndex_type(IndexType.KEYS); 
     return cd; 
    }  

참고 문헌에서입니다

List<ColumnDef> columns = new ArrayList<ColumnDef>(); 
    columns.add(newIndexedColumnDef("columnName", "UTF8Type")); 
    List<ColumnDefinition> columnMetadata = ThriftColumnDef 
      .fromThriftList(columns); 
    cdefs.add(cf_def); //cf_def is your columnfamily definition 

있습니다.

+4

newIndexedColumnDef 구현이 누락되었습니다. – gubby

+2

newIndexedColumnDef에 대한 코드를 찾으십시오. http://www.thydoc.com/cassandra-hector-core/doxygen/classme_1_1prettyprint_1_1hector_1_1api_1_1KeyspaceCreationTest.html –