Udostępnij za pośrednictwem


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ć.

    Zrzut ekranu przedstawiający aktualizowanie właściwości klastra Cassandra.

  • Połącz się z klastrem z poziomu protokołu CQLSH.

Tworzenie danych za pomocą indeksu Lucene

  1. 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
       );
    
  2. 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"}
             }
          }'
       };
    
  3. 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

  1. 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
    
  2. 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"}}');
    
  3. 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

  1. 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;
    
  2. 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;
    
  3. 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;
    
  4. 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;
    
  5. 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: