2011-05-30 5 views
3

Bonjour collègues développeurs, entre autres peu coincé dans l'interrogation à cassandra, im essayant de google comment ajouter restriction/conditionné dans cassandra et obtenu quelques exemples, donc je créer méthode comme ça, j'avec Hector pour API client:Comment rechercher une valeur dans Cassandra comme 'OERE' dans SQL?

IndexedSlicesQuery<String,String,String> indexedSlicesQuery=new IndexedSlicesQuery<String, String, String>(keyspace, serializer, serializer, serializers); 
    indexedSlicesQuery.addEqualsExpression(columnName, value); 
    indexedSlicesQuery.setReturnKeysOnly(); 
    indexedSlicesQuery.setColumnFamily(COLUMNFAMILY); 
    indexedSlicesQuery.setStartKey(""); 
    QueryResult<OrderedRows<String,String,String>> result=indexedSlicesQuery.execute(); 

    return result; 

est la bonne méthode? est la méthode "WHERE" est indexedSlicesQuery.addEqualsExpression(columnName, value);?

tout corps peut m'aider? j'essaie encore ceci, parce que je suis une erreur comme ceci:

1296 [main] INFO me.prettyprint.cassandra.hector.TimingLogger - start[1306744089788] time[158] tag[READ.fail_] 
Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:No indexed columns present in index clause with operator EQ) 
     at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:42) 
     at me.prettyprint.cassandra.service.KeyspaceServiceImpl$12.execute(KeyspaceServiceImpl.java:513) 
     at me.prettyprint.cassandra.service.KeyspaceServiceImpl$12.execute(KeyspaceServiceImpl.java:495) 
     at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:101) 
     at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:221) 
     at me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailover(KeyspaceServiceImpl.java:129) 
     at me.prettyprint.cassandra.service.KeyspaceServiceImpl.getIndexedSlices(KeyspaceServiceImpl.java:517) 
     at me.prettyprint.cassandra.model.IndexedSlicesQuery$1.doInKeyspace(IndexedSlicesQuery.java:140) 
     at me.prettyprint.cassandra.model.IndexedSlicesQuery$1.doInKeyspace(IndexedSlicesQuery.java:131) 
     at me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspaceAndMeasure(KeyspaceOperationCallback.java:20) 
     at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingKeyspace.java:85) 
     at me.prettyprint.cassandra.model.IndexedSlicesQuery.execute(IndexedSlicesQuery.java:130) 

iam désolé pour ma question débutant et mes mauvais english..thanks ..: D

MISE À JOUR

OK, après googling et googling, j'ai trouvé une solution basée sur ce Link, cette technique est de créer index_type lorsque créer une famille de colonnes, comme ceci (basé sur ce lien):

[[email protected]] create column family users with comparator=UTF8Type 
... and column_metadata=[{column_name: full_name, validation_class: UTF8Type}, 
... {column_name: state, validation_class: UTF8Type}, 
... {column_name: birth_date, validation_class: LongType, index_type: KEYS}]; 

créer après cette famille de colonne indexée, vous pouvez interroger llike ordinray sql-cassandra cli..and je voudrais essayer que hector..thanks votre attention ..: D

+0

pouvez-vous montrer brièvement votre recherche comme option pour cassandra dans la section de réponse. Cela peut être utile pour tous. – BobDroid

Répondre

2

Vous devez ajouter un index la colonne sur laquelle vous voulez exécuter la clause WHERE.

+0

Bonjour Zanson, Merci pour votre réponse, j'ai essayé et réussi à cassandra-cli, mais j'ai trouvé problème dans Hector ..: D – fahmi

Questions connexes