Bagikan melalui


Mulai cepat: Cari Azure Managed Instance for Apache Cassandra menggunakan Indeks Lucene (Pratinjau)

Cassandra Lucene Index, berasal dari Stratio Cassandra, adalah plugin untuk Apache Cassandra yang memperluas fungsionalitas indeksnya untuk menyediakan kemampuan pencarian teks lengkap dan pencarian multivariasi, geospasial, dan bitemporal gratis. Ini dicapai melalui implementasi berbasis Apache Lucene dari indeks sekunder Cassandra, di mana setiap simpul kluster mengindeks datanya sendiri. Mulai cepat ini menunjukkan cara mencari Azure Managed Instance for Apache Cassandra menggunakan Indeks Lucene.

Penting

Indeks Lucene berada dalam pratinjau publik. Fitur ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Peringatan

Batasan dengan plugin indeks Lucene adalah bahwa pencarian lintas partisi tidak dapat dijalankan hanya dalam indeks - Cassandra perlu mengirim kueri ke setiap simpul. Ini dapat menyebabkan masalah dengan performa (memori dan beban CPU) untuk pencarian lintas partisi yang dapat memengaruhi beban kerja status stabil.

Jika persyaratan pencarian signifikan, sebaiknya sebarkan pusat data sekunder khusus untuk digunakan hanya untuk pencarian, dengan jumlah simpul minimal, masing-masing memiliki jumlah inti yang tinggi (minimal 16). Keyspace di pusat data utama (operasional) Anda kemudian harus dikonfigurasi untuk mereplikasi data ke pusat data sekunder (pencarian) Anda.

Prasyarat

  • Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

  • Menyebarkan kluster Azure Managed Instance for Apache Cassandra. Anda dapat melakukan ini melalui portal - Indeks Lucene akan diaktifkan secara default ketika kluster disebarkan dari portal. Jika Anda ingin menambahkan indeks Lucene ke kluster yang ada, klik Update di bilah gambaran umum portal, pilih Cassandra Lucene Index, dan klik perbarui untuk menyebarkan.

    Cuplikan layar Perbarui Properti Kluster Cassandra.

  • Sambungkan ke kluster Anda dari CQLSH.

Membuat data dengan Indeks Lucene

  1. Di jendela perintah Anda CQLSH , buat keyspace dan tabel seperti di bawah ini:

       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. Sekarang buat indeks sekunder kustom pada tabel menggunakan Indeks 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. Sisipkan contoh tweet berikut:

        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);
    

Mengontrol konsistensi baca

  1. Indeks yang Anda buat sebelumnya akan mengindeks semua kolom dalam tabel dengan jenis yang ditentukan, dan indeks baca yang digunakan untuk pencarian akan disegarkan sekali per detik. Atau, Anda dapat secara eksplisit me-refresh semua pecahan indeks dengan pencarian kosong dengan konsistensi ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. Sekarang, Anda dapat mencari tweet dalam rentang tanggal tertentu:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. Pencarian ini juga dapat dilakukan dengan memaksa refresh eksplisit shard indeks yang terlibat:

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

Mencari data

  1. Untuk mencari 100 tweet teratas yang lebih relevan di mana bidang isi berisi frasa "Klik tautan saya" dalam rentang tanggal tertentu:

        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. Untuk memperbaiki pencarian agar hanya mendapatkan tweet yang ditulis oleh pengguna yang namanya dimulai dengan "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. Untuk mendapatkan 100 hasil yang difilter terbaru, Anda bisa menggunakan opsi pengurutan:

        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. Pencarian sebelumnya dapat dibatasi untuk tweet yang dibuat dekat dengan posisi geografis:

        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. Dimungkinkan juga untuk mengurutkan hasil berdasarkan jarak ke posisi geografis:

        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;
    

Langkah berikutnya

Dalam mulai cepat ini, Anda mempelajari cara mencari kluster Azure Managed Instance for Apache Cassandra menggunakan Lucene Search. Sekarang, Anda dapat mulai bekerja menggunakan kluster: