Guida introduttiva: Cercare Istanza gestita di Azure per Apache Cassandra usando Lucene Index (anteprima)
Cassandra Lucene Index, derivato da Stratio Cassandra, è un plug-in per Apache Cassandra che estende la funzionalità dell'indice per offrire funzionalità di ricerca full-text e la ricerca multivariabile, geospaziale e bitemporal. 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 eseguire una ricerca in Azure Istanza gestita per Apache Cassandra usando Lucene Index.
Importante
Lucene Index è disponibile in anteprima pubblica. Questa funzionalità viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Avviso
Una limitazione con il plug-in di indice Lucene è che le ricerche tra partizioni non possono essere eseguite esclusivamente nell'indice. Cassandra deve inviare la query a ogni nodo. Ciò può causare problemi con le prestazioni (memoria e carico della CPU) per le ricerche tra partizioni che possono influire sui carichi di lavoro dello stato stabile.
Se i requisiti di ricerca sono significativi, è consigliabile distribuire un data center secondario dedicato da usare solo per le ricerche, con un numero minimo di nodi, ognuno con 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 Istanza gestita di Azure per il cluster Apache Cassandra. A tale scopo, è possibile usare il portale : gli indici Lucene verranno abilitati per impostazione predefinita quando i cluster vengono distribuiti dal portale. Per aggiungere indici Lucene a un cluster esistente, fare clic
Update
nel pannello panoramica del portale, selezionareCassandra Lucene Index
e fare clic su Aggiorna per distribuire.Connettersi al cluster da CQLSH.
Creare dati con Lucene Index
CQLSH
Nella finestra di comando creare un keyspace e una tabella come indicato di seguito: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 e l'indice di lettura usato per la ricerca verrà aggiornato una volta al secondo. In alternativa, è possibile aggiornare in modo esplicito tutte le partizioni dell'indice con una ricerca vuota con coerenza ALL:
CONSISTENCY ALL SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}'); CONSISTENCY QUORUM
È ora possibile cercare 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"}}');
Questa ricerca può essere eseguita anche 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;
Ricerca dei dati
Per cercare i primi 100 tweet più pertinenti in cui il campo corpo contiene la frase "Fare clic sul collegamento" 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;
Per perfezionare la ricerca per ottenere solo i tweet scritti dagli utenti i cui nomi iniziano 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;
La ricerca precedente può essere limitata 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 da 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;
Passaggi successivi
In questo argomento di avvio rapido si è appreso come cercare un cluster Apache Cassandra di Azure Istanza gestita usando Lucene Search. A questo punto è possibile iniziare a usare il cluster: