Schnellstart: Durchsuchen von Azure Managed Instance for Apache Cassandra mithilfe des Lucene-Index (Vorschau)

Der Cassandra Lucene-Index, abgeleitet von Stratio Cassandra, ist ein Plug-In für Apache Cassandra, das seine Indexfunktionalität erweitert, um Volltextsuchfunktionen und eine kostenlose multivariable, räumliche und bitemporale Suche zu ermöglichen. Dies wird durch eine Apache Lucene-basierte Implementierung sekundärer Cassandra-Indizes erreicht, bei der jeder Knoten des Clusters seine eigenen Daten indiziert. In dieser Schnellstartanleitung wird veranschaulicht, wie Sie Azure Managed Instance for Apache Cassandra mithilfe des Lucene-Index durchsuchen.

Wichtig

Der Lucene-Index befindet sich in der öffentlichen Vorschau. Dieses Feature wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Warnung

Eine Einschränkung beim Lucene-Index-Plug-In besteht darin, dass partitionsübergreifende Suchvorgänge nicht ausschließlich im Index ausgeführt werden können – Cassandra muss die Abfrage an jeden Knoten senden. Dies kann zu Leistungsproblemen (Arbeitsspeicher und CPU-Auslastung) bei partitionsübergreifenden Suchvorgängen führen, die sich auf Workloads im stabilen Zustand auswirken können.

Bei signifikanten Suchanforderungen empfehlen wir die Bereitstellung eines dedizierten sekundären Rechenzentrums, das nur für Suchvorgänge verwendet wird, mit einer minimalen Anzahl von Knoten, von denen jeder über eine hohe Anzahl von Kernen (mindestens 16) verfügt. Die Schlüsselbereiche in Ihrem primären (operationellen) Rechenzentrum sollten dann so konfiguriert werden, dass Daten in Ihr sekundäres (Such-)Rechenzentrum repliziert werden.

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Stellen Sie einen Azure Managed Instance for Apache Cassandra-Cluster bereit. Sie können dies über das Portal tun – Lucene-Indizes werden standardmäßig aktiviert, wenn Cluster über das Portal bereitgestellt werden. Wenn Sie Lucene-Indizes zu einem vorhandenen Cluster hinzufügen möchten, klicken Sie Update auf dem Blatt „Übersicht“ im Portal, wählen Sie Cassandra Lucene Index aus, und klicken Sie auf „zum Bereitstellen aktualisieren“.

    Screenshot von „Aktualisieren der Cassandra-Clustereigenschaften.

  • Stellen Sie über CQLSH eine Verbindung mit Ihrem Cluster her.

Erstellen von Daten mit dem Lucene-Index

  1. Erstellen Sie in Ihrem CQLSH-Befehlsfenster einen Schlüsselbereich und eine Tabelle wie unten angezeigt:

       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. Erstellen Sie nun mithilfe des Lucene-Index einen benutzerdefinierten sekundären Index für die Tabelle:

       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. Fügen Sie die folgenden Beispiel-Tweets ein:

        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);
    

Steuern der Lesekonsistenz

  1. Der zuvor von Ihnen erstellte Index indiziert alle Spalten in der Tabelle mit den angegebenen Typen, und der für die Suche verwendete Leseindex wird einmal pro Sekunde aktualisiert. Alternativ können Sie alle Indexshards explizit mit einer leeren Suche mit der Konsistenz „ALLE“ aktualisieren:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Jetzt können Sie innerhalb eines bestimmten Datumsbereichs nach Tweets suchen:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Diese Suche kann auch ausgeführt werden, indem eine explizite Aktualisierung der beteiligten Indexshards erzwungen wird:

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

Daten durchsuchen

  1. So durchsuchen Sie die Top 100 relevanteren Tweets innerhalb eines bestimmten Datumsbereichs, in denen das Textfeld den Ausdruck „Klick auf meinen Link“ enthält:

        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. So verfeinern Sie die Suche, um nur die Tweets abzurufen, die von Benutzern geschrieben wurden, deren Namen mit „q“ beginnen:

        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. Um die 100 neueren gefilterten Ergebnisse zu erhalten, können Sie die Sortieroption verwenden:

        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. Die vorherige Suche kann auf Tweets beschränkt werden, die nahe an einer geografischen Position erstellt wurden:

        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. Es ist auch möglich, die Ergebnisse nach Entfernung zu einer geografischen Position zu sortieren:

        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;
    

Nächste Schritte

In diesem Schnellstart haben Sie gelernt, wie Sie mithilfe der Lucene-Suche einen Azure Managed Instance for Apache Cassandra-Cluster durchsuchen. Sie können jetzt beginnen, mit dem Cluster zu arbeiten.