Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
Connetti al cluster tramite la Cassandra Query Language Shell (CQLSH).
Creare dati con Lucene Index
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 );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"} } }' };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
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È 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"}}');È 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
Per cercare i primi 100 tweet più pertinenti e dove il
bodycampo contiene la fraseClick my linkall'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;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;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;È 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;È 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: