Sdílet prostřednictvím


Rychlý start: Vyhledání spravované instance Azure pro Apache Cassandra pomocí Lucene Indexu (Preview)

Cassandra Lucene Index, který je odvozen od Stratio Cassandra, je modul plug-in pro Apache Cassandra. Lucene Index rozšiřuje funkce indexu, aby poskytoval možnosti fulltextového vyhledávání a bezplatné víceparametrické, geoprostorové a bitemporální vyhledávání. Dosahuje se prostřednictvím implementace sekundárních indexů Cassandra založené na Apache Lucene, kde každý uzel clusteru indexuje svá vlastní data. Tento rychlý start ukazuje, jak pomocí Lucene Indexu prohledat službu Azure Managed Instance for Apache Cassandra.

Důležité

Lucene Index je ve verzi Public Preview. Tato funkce je poskytována bez smlouvy o úrovni služeb. Nedoporučujeme ho pro produkční úlohy. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Modul plug-in Lucene Index nemůže provádět vyhledávání napříč oddíly pouze v indexu. Cassandra potřebuje odeslat dotaz do každého uzlu. Toto omezení může vést k problémům s výkonem (zatížení paměti a procesoru) při vyhledávání napříč oddíly, které mohou ovlivnit úlohy ustáleného stavu.

Pokud jsou vaše požadavky na vyhledávání významné, doporučujeme nasadit vyhrazené sekundární datové centrum, které se použije jenom pro vyhledávání. Minimální počet uzlů by měl mít vysoký počet jader (minimálně 16). Klíčové prostory v primárním (provozním) datacentru by měly být nakonfigurovány tak, aby replikovaly data do sekundárního (vyhledávacího) datacentra.

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

  • Nasazení clusteru Azure Managed Instance for Apache Cassandra Tento krok můžete provést prostřednictvím webu Azure Portal. Indexy Lucene jsou ve výchozím nastavení povolené při nasazení clusterů z portálu. Pokud chcete přidat indexy Lucene do existujícího clusteru, vyberte v podokně Přehled portálu možnost Aktualizovat. Vyberte Cassandra Lucene Index a pak vyberte Aktualizovat k nasazení.

    Snímek obrazovky znázorňující vlastnosti clusteru Update Cassandra

  • Připojte se ke clusteru z prostředí Cassandra Query Language Shell (CQLSH).

Vytvoření dat pomocí Lucene Indexu

  1. V příkazovém okně CQLSH vytvořte keyspace a tabulku:

       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. Teď vytvořte vlastní sekundární index tabulky pomocí Lucene Indexu:

       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. Vložte následující ukázkové 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);
    

Řízení konzistence čtení

  1. Index, který jste vytvořili dříve, indexuje všechny sloupce v tabulce se zadanými typy. Index pro čtení, který se používá k vyhledávání, se aktualizuje jednou za sekundu. Případně můžete explicitně aktualizovat všechny části indexu prázdným vyhledáváním s konzistencí ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Teď můžete vyhledávat tweety v určitém rozsahu kalendářních dat:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Toto hledání můžete provést také vynucením explicitní aktualizace zahrnutých shardů indexu:

        SELECT * FROM tweets WHERE expr(tweets_index, '{
           filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"},
           refresh: true
        }') limit 100;
    

Hledání dat

  1. Pokud chcete prohledat prvních 100 tweetů, které jsou relevantnější a kde body pole obsahuje frázi Click my link v určitém rozsahu kalendářních 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. Pokud chcete hledání upřesnit, abyste získali pouze tweety napsané uživateli, jejichž jména začínají na "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. Pokud chcete získat 100 filtrovaných výsledků, které jsou novější, můžete použít možnost řazení:

        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. Předchozí vyhledávání můžete omezit na tweety vytvořené blízko zeměpisné polohy:

        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. Výsledky můžete také seřadit podle vzdálenosti od zeměpisné polohy:

        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;
    

Další krok

V tomto rychlém startu jste zjistili, jak pomocí Lucene Indexu prohledat cluster Azure Managed Instance for Apache Cassandra. Teď můžete začít pracovat s clusterem: