Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Cassandra Lucene Index, som härleds från Stratio Cassandra, är ett plugin-program för Apache Cassandra. Lucene Index utökar sina 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 är i offentlig förhandsversion. Den här funktionen tillhandahålls utan ett serviceavtal. Vi rekommenderar det inte för produktionsarbetsbelastningar. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Plugin-programmet Lucene Index kan inte köra sökningar mellan partitioner enbart i indexet. Cassandra måste skicka frågan till varje nod. Den här begränsningen 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.
Om dina sökkrav är betydande rekommenderar vi att du distribuerar ett dedikerat sekundärt datacenter för att endast använda för sökningar. Ett minimalt antal noder bör ha 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).
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Distribuera ett Azure Managed Instance för Apache Cassandra-kluster. Du kan göra det här steget via Azure-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 väljer du Uppdatera i portalens översiktsfönster . Välj Cassandra Lucene Index och välj sedan Uppdatera för att distribuera.
Anslut till klustret från Cassandra Query Language Shell (CQLSH).
Skapa data med Lucene Index
I CQLSH-kommandofönstret skapar du ett nyckelområde och en tabell:
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 );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"} } }' };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
Det index som du skapade tidigare indexerar alla kolumner i tabellen med de angivna typerna. Läsindexet som används för sökning uppdateras en gång per sekund. Alternativt kan du uttryckligen uppdatera alla indexskärvor med en tom sökning med konsistensen
ALL:CONSISTENCY ALL SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}'); CONSISTENCY QUORUMNu 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"}}');Du kan också utföra den här sökningen 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
Om du vill söka bland de 100 främsta tweetsen som är mer relevanta och där
bodyfältet innehåller frasenClick my linkinom 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;Så här förfinar du sökningen så att endast tweets skrivs 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;Om du vill hämta de 100 filtrerade resultaten som är nyare 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;Du kan begränsa den tidigare sökningen till tweets som har 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;Du kan också sortera resultatet 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 Index. Nu kan du börja arbeta med klustret: