Rychlý start: Vyhledávání ve službě Azure Managed Instance pro Apache Cassandra pomocí indexu Lucene (Preview)

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

Důležité

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

Upozornění

Modul plug-in indexu Lucene má omezení v tom, že vyhledávání napříč oddíly nejde provádět pouze v indexu – Cassandra musí odeslat dotaz do každého uzlu. To může vést k problémům s výkonem (zatížení paměti a procesoru) při hledání napříč oddíly, které můžou mít vliv na úlohy v stabilním stavu.

Pokud jsou požadavky na vyhledávání významné, doporučujeme nasadit vyhrazené sekundární datové centrum, které se bude používat jenom pro vyhledávání s minimálním počtem uzlů, z nichž každý má vysoký počet jader (minimálně 16). Prostory klíčů v primárním (provozním) datovém centru by pak měly být nakonfigurované tak, aby replikovaly data do sekundárního datacentra (vyhledávání).

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

  • Nasazení clusteru služby Azure Managed Instance for Apache Cassandra Můžete to provést prostřednictvím portálu – indexy Lucene se ve výchozím nastavení povolí při nasazení clusterů z portálu. Pokud chcete přidat indexy Lucene do existujícího clusteru, klikněte Update v okně přehledu portálu, vyberte Cassandra Lucene Indexa kliknutím na Aktualizovat nasaďte.

    Snímek obrazovky s aktualizací vlastností clusteru Cassandra

  • Připojte se ke clusteru z CQLSH.

Vytvoření dat pomocí indexu Lucene

  1. V příkazovém CQLSH okně vytvořte prostor klíčů a tabulku, jak je znázorněno níže:

       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ď v tabulce vytvořte vlastní sekundární index pomocí indexu 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. 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, bude indexovat všechny sloupce v tabulce se zadanými typy a index čtení použitý k vyhledávání se aktualizuje jednou za sekundu. Případně můžete explicitně aktualizovat všechny indexové horizontální oddíly 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 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í lze provést také vynucením explicitní aktualizace příslušných horizontálních oddílů 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;
    

Hledat data

  1. Pokud chcete vyhledat prvních 100 relevantnějších tweetů, kde pole textu obsahuje frázi "Klikněte na můj odkaz" v určitém rozsahu 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. Upřesnění hledání tak, aby se načítá jenom 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 novějších filtrovaných výsledků, 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í hledání může být omezeno 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 je také možné 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ší kroky

V tomto rychlém startu jste zjistili, jak vyhledat cluster Apache Cassandra ve službě Azure Managed Instance pomocí služby Lucene Search. Teď můžete začít pracovat s clusterem: