Condividi tramite


Avvio rapido: Cercare Istanza gestita di Azure per Apache Cassandra usando Lucene Index (anteprima)

Cassandra Lucene Index, che deriva da Stratio Cassandra, è un plug-in per Apache Cassandra. Lucene Index estende le sue capacità di indicizzazione per offrire funzionalità di ricerca full-text e opzionalmente di ricerca multivariabile, geospaziale e bitemporale. Viene ottenuto tramite un'implementazione basata su Apache Lucene degli indici secondari Cassandra, in cui ogni nodo del cluster indicizza i propri dati. Questa guida introduttiva illustra come cercare un'Azure Managed Instance di Apache Cassandra usando il Lucene Index.

Importante

Lucene Index è disponibile in anteprima pubblica. Questa funzionalità viene fornita senza un contratto di servizio. Non è consigliabile usarlo per carichi di lavoro di produzione. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.

Il plug-in Lucene Index non può eseguire ricerche tra partizioni solo nell'indice. Cassandra deve inviare la query a ogni nodo. Questa limitazione può causare problemi con le prestazioni (memoria e carico della CPU) per le ricerche tra partizioni che potrebbero influire sui carichi di lavoro con stato stabile.

Se i requisiti di ricerca sono significativi, è consigliabile distribuire un data center secondario dedicato da usare solo per le ricerche. Un numero minimo di nodi deve avere un numero elevato di core (minimo 16). I keyspace nel data center primario (operativo) devono quindi essere configurati per replicare i dati nel data center secondario (di ricerca).

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Distribuire un cluster di Istanza gestita di Azure per Apache Cassandra. È possibile eseguire questo passaggio tramite il portale di Azure. Per impostazione predefinita, gli indici Lucene sono abilitati quando i cluster vengono distribuiti dal portale. Per aggiungere indici Lucene a un cluster esistente, selezionare Aggiorna nel riquadro Panoramica del portale. Selezionare Cassandra Lucene Index, quindi scegliere Aggiorna per eseguire la distribuzione.

    Screenshot che mostra l'aggiornamento delle proprietà del cluster Cassandra.

  • Connetti al cluster tramite la Cassandra Query Language Shell (CQLSH).

Creare dati con Lucene Index

  1. Nella finestra di comando di CQLSH creare un keyspace e una tabella:

       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. Creare ora un indice secondario personalizzato nella tabella usando 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. Inserire i tweet di esempio seguenti:

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

Controllare la coerenza di lettura

  1. L'indice creato in precedenza indicizza tutte le colonne della tabella con i tipi specificati. L'indice di lettura usato per la ricerca viene aggiornato una volta al secondo. In alternativa, è possibile aggiornare in modo esplicito tutte le partizioni di indice con una ricerca vuota con la coerenza di ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. È ora possibile cercare i tweet all'interno di un determinato intervallo di date:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. È anche possibile eseguire questa ricerca forzando un aggiornamento esplicito delle partizioni dell'indice coinvolte:

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

Dati di ricerca

  1. Per cercare i primi 100 tweet più pertinenti e dove il body campo contiene la frase Click my link all'interno di un intervallo di date specifico:

        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. Per perfezionare la ricerca in modo da ottenere solo i tweet scritti da utenti il cui nome inizia con "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. Per ottenere i 100 risultati filtrati più recenti, è possibile usare l'opzione di ordinamento:

        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. È possibile limitare la ricerca precedente ai tweet creati vicino a una posizione geografica:

        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. È anche possibile ordinare i risultati in base alla distanza in base a una posizione geografica:

        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;
    

Passo successivo

In questo argomento di avvio rapido si è appreso come cercare un cluster di Istanza gestita di Azure per Apache Cassandra usando Lucene Index. A questo punto è possibile iniziare a usare il cluster: