2011-04-28 7 views
4

Dans mon keyspaceComment créer une requête similaire dans Cassandra?

posts = [ 
    #key 
    'post1': { 
     # columns and value 
     'url': 'foobar.com/post1', 
     'body': 'Currently has client support FOOBAR for the following programming languages..', 
    }, 
    'post2': { 
     'url': 'foobar.com/post2', 
     'body': 'The table with the following table FOOBAR structure...', 
    }, 
    # ... , 
} 

Comment créer une requête comme à Cassandra pour obtenir tous les messages qui contiennent le mot « foobar »? Dans SQL est SELECT * FROM POST WHERE BODY LIKE '%FOOBAR%', mais dans Cassandra?

+0

LIKE n'est pas encore supporté par Cassandra. – bitcycle

Répondre

0

Vous pouvez créer une autre famille de colonnes dans laquelle les clés correspondent aux domaines et les valeurs correspondent aux clés de la famille de colonnes d'origine. De cette façon, vous pouvez vous référer directement aux enregistrements d'un domaine spécifique.

+0

Eh bien, pour moi créer une autre famille de colonnes c'est très compliqué. Je pense que Cassandra doit améliorer ce problème. Dans MongoDB c'est très facile. – Bruce

5

La seule façon de le faire efficacement est d'utiliser un moteur de recherche en texte intégral comme https://github.com/tjake/Solandra (Solr-on-cassandra). Bien sûr, vous pouvez rouler les vôtres en utilisant les mêmes techniques manuellement, mais ce n'est généralement pas nécessaire.

Notez que cela est également vrai pour les bases de données SQL: elles traduiront% FOO% en une analyse de table, sauf si vous utilisez une extension FTS comme tsearch2 de postgresql. Cassandra 3.4 a ajouté le support de LIKE dans CSQL.

+0

Si votre cluster Cassandra est assez grand, effectuer des analyses de table peut être raisonnablement rapide, car chaque nœud doit uniquement analyser une fraction des données. Je ne suis pas sûr s'il y a un moyen de le faire nativement si. – minimalis

0

Donc, finalement, il est disponible en mode natif.

Questions connexes