Dela via


Snabbstart: Sök i Azure Managed Instance för Apache Cassandra med Lucene Index (förhandsversion)

Cassandra Lucene Index, härlett från Stratio Cassandra, är ett plugin-program för Apache Cassandra som utökar dess indexfunktioner för att tillhandahålla fulltextsökningsfunktioner och gratis multivariabel, geospatial och bitemporal sökning. Det uppnås genom en Apache Lucene-baserad implementering av Sekundära Cassandra-index, där varje nod i klustret indexerar sina egna data. Den här snabbstarten visar hur du söker i Azure Managed Instance efter Apache Cassandra med hjälp av Lucene Index.

Viktigt

Lucene Index finns i offentlig förhandsversion. Den här funktionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Varning

En begränsning med Lucene-index-plugin-programmet är att sökningar mellan partitioner inte kan köras enbart i indexet – Cassandra måste skicka frågan till varje nod. Detta kan leda till problem med prestanda (minne och CPU-belastning) för sökningar mellan partitioner som kan påverka arbetsbelastningar med stabilt tillstånd.

Där sökkraven är betydande rekommenderar vi att du distribuerar ett dedikerat sekundärt datacenter som endast ska användas för sökningar, med ett minimalt antal noder, där var och en har ett stort antal kärnor (minst 16). Nyckelrymderna i ditt primära (operativa) datacenter bör sedan konfigureras för att replikera data till ditt sekundära datacenter (sökning).

Krav

  • Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

  • Distribuera ett Azure Managed Instance för Apache Cassandra-kluster. Du kan göra detta via portalen – Lucene-index aktiveras som standard när kluster distribueras från portalen. Om du vill lägga till Lucene-index i ett befintligt kluster klickar du på Update bladet Portalöversikt, väljer Cassandra Lucene Indexoch klickar på Uppdatera för att distribuera.

    Skärmbild av Uppdatera egenskaper för Cassandra-kluster.

  • Anslut till klustret från CQLSH.

Skapa data med Lucene Index

  1. CQLSH I kommandofönstret skapar du ett nyckelområde och en tabell enligt nedan:

       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. Skapa nu ett anpassat sekundärt index i tabellen med Hjälp av 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. Infoga följande exempel på tweets:

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

Kontrollera läskonsekvens

  1. Indexet som du skapade tidigare indexeras alla kolumner i tabellen med de angivna typerna, och det läsindex som används för sökning uppdateras en gång per sekund. Du kan också uttryckligen uppdatera alla indexshards med en tom sökning med konsekvensEN ALLA:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Nu kan du söka efter tweets inom ett visst datumintervall:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Den här sökningen kan också utföras genom att tvinga fram en explicit uppdatering av de berörda indexshardsna:

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

Sök efter data

  1. Om du vill söka bland de 100 mest relevanta tweetsen där brödtextfältet innehåller frasen "Klicka på min länk" inom ett visst datumintervall:

        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. Så här förfinar du sökningen för att endast hämta tweets skrivna av användare vars namn börjar med "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. Om du vill hämta de 100 senaste filtrerade resultaten kan du använda sorteringsalternativet:

        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. Den tidigare sökningen kan begränsas till tweets som skapats nära en geografisk position:

        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. Det är också möjligt att sortera resultaten efter avstånd till en geografisk position:

        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ästa steg

I den här snabbstarten har du lärt dig hur du söker i ett Azure Managed Instance för Apache Cassandra-kluster med hjälp av Lucene Search. Nu kan du börja arbeta med klustret: