Delen via


Quickstart: Azure Managed Instance doorzoeken voor Apache Cassandra met behulp van Lucene Index (preview)

Cassandra Lucene Index, afgeleid van Stratio Cassandra, is een invoegtoepassing voor Apache Cassandra die de indexfunctionaliteit uitbreidt om zoekmogelijkheden voor volledige tekst en gratis multivariabele, georuimtelijke en bitemporale zoekopdrachten te bieden. Dit wordt bereikt via een op Apache Lucene gebaseerde implementatie van secundaire Cassandra-indexen, waarbij elk knooppunt van het cluster zijn eigen gegevens indexeert. In deze quickstart ziet u hoe u met Lucene Index kunt zoeken in Azure Managed Instance voor Apache Cassandra.

Belangrijk

Lucene Index is in openbare preview. Deze functie wordt geleverd zonder service level agreement en wordt niet aanbevolen voor productieworkloads. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Waarschuwing

Een beperking met de Lucene-indexinvoegtoepassing is dat zoekopdrachten tussen partities niet alleen in de index kunnen worden uitgevoerd. Cassandra moet de query naar elk knooppunt verzenden. Dit kan leiden tot problemen met prestaties (geheugen- en CPU-belasting) voor zoekopdrachten tussen partities die invloed kunnen hebben op werkbelastingen met een constante status.

Als zoekvereisten aanzienlijk zijn, raden we u aan om een speciaal secundair datacenter te implementeren dat alleen moet worden gebruikt voor zoekopdrachten, met een minimaal aantal knooppunten, elk met een groot aantal kernen (minimaal 16). De keyspaces in uw primaire (operationele) datacenter moeten vervolgens worden geconfigureerd om gegevens te repliceren naar uw secundaire (zoek)datacenter.

Vereisten

  • Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

  • Implementeer een Azure Managed Instance voor Een Apache Cassandra-cluster. U kunt dit doen via de portal : Lucene-indexen worden standaard ingeschakeld wanneer clusters vanuit de portal worden geïmplementeerd. Als u Lucene-indexen wilt toevoegen aan een bestaand cluster, klikt u Update op de overzichtsblade van de portal, selecteert Cassandra Lucene Indexu en klikt u op Bijwerken om te implementeren.

    Schermopname van Eigenschappen van Cassandra-cluster bijwerken.

  • Maak verbinding met uw cluster vanuit CQLSH.

Gegevens maken met Lucene Index

  1. Maak in het CQLSH opdrachtvenster een keyspace en tabel zoals hieronder:

       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. Maak nu een aangepaste secundaire index in de tabel met behulp van Lucene Index:

       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. Voeg de volgende voorbeeldtweets in:

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

Leesconsistentie beheren

  1. De index die u eerder hebt gemaakt, indexeert alle kolommen in de tabel met de opgegeven typen en de leesindex die wordt gebruikt voor zoeken, wordt eenmaal per seconde vernieuwd. U kunt ook expliciet alle index-shards vernieuwen met een lege zoekopdracht met consistentie ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. U kunt nu zoeken naar tweets binnen een bepaald datumbereik:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Deze zoekopdracht kan ook worden uitgevoerd door expliciete vernieuwing van de betrokken index-shards af te dwingen:

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

Gegevens zoeken

  1. Als u in de top 100 relevantere tweets wilt zoeken waarbij het hoofdtekstveld de woordgroep 'Klik op mijn koppeling' bevat binnen een bepaald datumbereik:

        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. Om de zoekopdracht te verfijnen zodat alleen de tweets worden opgehaald die zijn geschreven door gebruikers waarvan de namen beginnen met '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. Als u de 100 recentere gefilterde resultaten wilt ophalen, kunt u de sorteeroptie gebruiken:

        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. De vorige zoekopdracht kan worden beperkt tot tweets die dicht bij een geografische positie zijn gemaakt:

        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. Het is ook mogelijk om de resultaten te sorteren op afstand tot een geografische positie:

        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;
    

Volgende stappen

In deze quickstart hebt u geleerd hoe u met Lucene Search kunt zoeken in een beheerd exemplaar van Azure voor Een Apache Cassandra-cluster. U kunt nu aan de slag met het cluster: