Szybki start: wyszukiwanie wystąpienia zarządzanego platformy Azure dla usługi Apache Cassandra przy użyciu indeksu Lucene (wersja zapoznawcza)
Cassandra Lucene Index, pochodząca z warstwy Stratio Cassandra, jest wtyczką apache Cassandra, która rozszerza funkcjonalność indeksu w celu zapewnienia funkcji wyszukiwania pełnotekstowego i bezpłatnych wielowariancji, geoprzestrzennych i bitemporalnych wyszukiwania. Jest on osiągany za pomocą implementacji indeksów pomocniczych bazy danych Cassandra opartych na systemie Apache Lucene, gdzie każdy węzeł klastra indeksuje własne dane. W tym przewodniku Szybki start pokazano, jak wyszukiwać wystąpienie zarządzane platformy Azure dla usługi Apache Cassandra przy użyciu indeksu Lucene.
Ważne
Indeks Lucene jest w publicznej wersji zapoznawczej. Ta funkcja jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
Ostrzeżenie
Ograniczeniem wtyczki indeksu Lucene jest to, że wyszukiwanie między partycjami nie może być wykonywane wyłącznie w indeksie — system Cassandra musi wysłać zapytanie do każdego węzła. Może to prowadzić do problemów z wydajnością (pamięcią i obciążeniem procesora CPU) w przypadku wyszukiwania między partycjami, które mogą mieć wpływ na obciążenia w stanie stałym.
Jeśli wymagania dotyczące wyszukiwania są znaczące, zalecamy wdrożenie dedykowanego pomocniczego centrum danych do użycia tylko w przypadku wyszukiwań z minimalną liczbą węzłów, z których każda ma dużą liczbę rdzeni (minimum 16). Przestrzenie kluczy w podstawowym (operacyjnym) centrum danych powinny być następnie skonfigurowane do replikowania danych do pomocniczego (wyszukiwania) centrum danych.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wdrażanie wystąpienia zarządzanego platformy Azure dla klastra Apache Cassandra. Można to zrobić za pośrednictwem portalu — indeksy Lucene będą domyślnie włączone, gdy klastry są wdrażane z poziomu portalu. Jeśli chcesz dodać indeksy Lucene do istniejącego klastra, kliknij
Update
blok Przegląd portalu, wybierz pozycjęCassandra Lucene Index
, a następnie kliknij przycisk Aktualizuj, aby wdrożyć.Połącz się z klastrem z poziomu protokołu CQLSH.
Tworzenie danych za pomocą indeksu Lucene
CQLSH
W oknie polecenia utwórz przestrzeń kluczy i tabelę w następujący sposób: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 );
Teraz utwórz niestandardowy indeks pomocniczy w tabeli przy użyciu indeksu Lucene:
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"} } }' };
Wstaw następujące przykładowe tweety:
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);
Kontrolowanie spójności odczytu
Utworzony wcześniej indeks spowoduje indeksowanie wszystkich kolumn w tabeli z określonymi typami, a indeks odczytu użyty do wyszukiwania zostanie odświeżony raz na sekundę. Alternatywnie możesz jawnie odświeżyć wszystkie fragmenty indeksu z pustym wyszukiwaniem ze spójnością ALL:
CONSISTENCY ALL SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}'); CONSISTENCY QUORUM
Teraz możesz wyszukiwać tweety w określonym zakresie dat:
SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
To wyszukiwanie można również wykonać przez wymuszenie jawnego odświeżenia zaangażowanych fragmentów indeksu:
SELECT * FROM tweets WHERE expr(tweets_index, '{ filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}, refresh: true }') limit 100;
Wyszukiwanie danych
Aby wyszukać 100 najważniejszych tweetów, w których pole treści zawiera frazę "Kliknij mój link" w określonym zakresie dat:
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;
Aby uściślić wyszukiwanie, aby uzyskać tylko tweety napisane przez użytkowników, których nazwy zaczynają się od "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;
Aby uzyskać 100 najnowszych odfiltrowanych wyników, możesz użyć opcji sortowania:
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;
Poprzednie wyszukiwanie można ograniczyć do tweetów utworzonych w pobliżu położenia geograficznego:
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;
Istnieje również możliwość sortowania wyników według odległości do położenia geograficznego:
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;
Następne kroki
W tym przewodniku Szybki start przedstawiono sposób wyszukiwania wystąpienia zarządzanego platformy Azure dla klastra Apache Cassandra przy użyciu usługi Lucene Search. Teraz możesz rozpocząć pracę z klastrem: