Partager via


Démarrage rapide : Rechercher Azure Managed Instance pour Apache Cassandra à l’aide de Lucene Index (préversion)

Cassandra Lucene Index, qui dérive de Stratio Cassandra, est un plug-in pour Apache Cassandra. Lucene Index étend ses fonctionnalités d’index pour fournir des fonctionnalités de recherche en texte intégral et une recherche multivariable, géospatiale et bitemporale gratuite. Elle est obtenue par le biais d’une implémentation basée sur Apache Lucene d’index secondaires Cassandra, où chaque nœud de l’index cluster indexe ses propres données. Ce guide de démarrage rapide montre comment rechercher Azure Managed Instance pour Apache Cassandra à l’aide de Lucene Index.

Important

Lucene Index est en préversion publique. Cette fonctionnalité est fournie sans contrat de niveau de service. Nous ne la recommandons pas pour les charges de travail de production. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Le plug-in Lucene Index ne peut pas exécuter de recherches entre partitions uniquement dans l’index. Cassandra doit envoyer la requête à chaque nœud. Cette limitation peut entraîner des problèmes de performances (mémoire et charge processeur) pour les recherches entre partitions susceptibles d’affecter les charges de travail à état stable.

Si vos besoins de recherche sont significatifs, nous vous recommandons de déployer un centre de données secondaire dédié à utiliser uniquement pour les recherches. Un nombre minimal de nœuds doit chacun avoir un nombre élevé de cœurs (minimum de 16). Les espaces de clés de votre centre de données principal (opérationnel) doivent ensuite être configurés pour répliquer des données vers votre centre de données secondaire (recherche).

Prérequis

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  • Déployez un cluster Azure Managed Instance pour Apache Cassandra. Vous pouvez effectuer cette étape via le portail Azure. Les index Lucene sont activés par défaut lorsque les clusters sont déployés à partir du portail. Si vous souhaitez ajouter des index Lucene à un cluster existant, sélectionnez Mettre à jour dans le volet Vue d’ensemble du portail. Sélectionnez l’index Lucene Cassandra, puis sélectionnez Mettre à jour pour déployer.

    Capture d’écran montrant les propriétés de mise à jour du cluster Cassandra.

  • Connectez-vous à votre cluster depuis le Cassandra Query Language Shell (CQLSH).

Créer des données avec Lucene Index

  1. Dans votre fenêtre de commande CQLSH, créez un espace de clés et une table :

       CREATE KEYSPACE demo
       WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'datacenter-1': 3};
       USE demo;
       CREATE TABLE tweets (
          id INT PRIMARY KEY,
          user TEXT,
          body TEXT,
          time TIMESTAMP,
          latitude FLOAT,
          longitude FLOAT
       );
    
  2. Créez maintenant un index secondaire personnalisé sur la table à l’aide de l’index Lucene :

       CREATE CUSTOM INDEX tweets_index ON tweets ()
       USING 'com.stratio.cassandra.lucene.Index'
       WITH OPTIONS = {
          'refresh_seconds': '1',
          'schema': '{
             fields: {
                id: {type: "integer"},
                user: {type: "string"},
                body: {type: "text", analyzer: "english"},
                time: {type: "date", pattern: "yyyy/MM/dd"},
                place: {type: "geo_point", latitude: "latitude", longitude: "longitude"}
             }
          }'
       };
    
  3. Insérez les exemples de tweets suivants :

        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (1,'theo','Make money fast, 5 easy tips', '2023-04-01T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (2,'theo','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (3,'quetzal','Click my link, like my stuff!', '2023-04-02T11:21:59.001+0000', 0.0, 0.0);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (4,'quetzal','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 40.3930, -3.7328);
        INSERT INTO tweets (id,user,body,time,latitude,longitude) VALUES (5,'quetzal','Click my link, like my stuff!', '2023-04-01T11:21:59.001+0000', 40.3930, -3.7329);
    

Contrôler la cohérence de lecture

  1. L’index que vous avez créé précédemment indexe toutes les colonnes de la table avec les types spécifiés. L’index de lecture utilisé pour la recherche est actualisé une fois par seconde. Vous pouvez également actualiser explicitement tous les fragments d’index avec une recherche vide, en respectant la cohérence de ALL.

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Maintenant, vous pouvez rechercher des tweets dans une certaine plage de dates :

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Vous pouvez également effectuer cette recherche en forçant une actualisation explicite des fragments d’index concernés.

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
           refresh: true
        }') limit 100;
    

Rechercher des données

  1. Pour rechercher les 100 premiers tweets plus pertinents et où le body champ contient l’expression Click my link dans une plage de dates particulière :

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1}
        }') LIMIT 100;
    
  2. Pour affiner la recherche afin d’obtenir uniquement les tweets écrits par les utilisateurs dont le nom commence par « q » :

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1}
        }') LIMIT 100;
    
  3. Pour obtenir les 100 résultats filtrés plus récents, vous pouvez utiliser l’option de tri :

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: {field: "time", reverse: true}
        }') limit 100;
    
  4. Vous pouvez restreindre la recherche précédente aux tweets créés près d’une position géographique :

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"},
              {type: "geo_distance", field: "place", latitude: 40.3930, longitude: -3.7328, max_distance: "1km"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: {field: "time", reverse: true}
        }') limit 100;
    
  5. Vous pouvez également trier les résultats par distance vers une position géographique :

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: [
              {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
              {type: "prefix", field: "user", value: "q"},
              {type: "geo_distance", field: "place", latitude: 40.3930, longitude: -3.7328, max_distance: "1km"}
           ],
           query: {type: "phrase", field: "body", value: "Click my link", slop: 1},
           sort: [
              {field: "time", reverse: true},
              {field: "place", type: "geo_distance", latitude: 40.3930, longitude: -3.7328}
           ]
        }') limit 100;
    

Étape suivante

Dans ce guide de démarrage rapide, vous avez appris à rechercher un cluster Azure Managed Instance pour Apache Cassandra à l’aide de Lucene Index. Vous pouvez maintenant commencer à utiliser le cluster :