التشغيل السريع: البحث في Azure Managed Instance ل Apache Cassandra باستخدام Lucene Index (معاينة)

Cassandra Lucene Index، المشتق من Stratio Cassandra، هو مكون إضافي ل Apache Cassandra الذي يوسع وظائف الفهرس الخاصة به لتوفير قدرات البحث عن النص الكامل والبحث المجاني متعدد المتغيرات والجيوفضائي والعضي. يتم تحقيق ذلك من خلال تنفيذ يستند إلى Apache Lucene للفهرس الثانوية Cassandra، حيث تقوم كل عقدة من نظام المجموعة بفهرسة بياناتها الخاصة. يوضح هذا التشغيل السريع كيفية البحث في Azure Managed Instance عن Apache Cassandra باستخدام Lucene Index.

هام

Lucene Index قيد المعاينة العامة. يتم توفير هذه الميزة بدون اتفاقية مستوى الخدمة، ولا يوصى بها لأحمال العمل الخاصة بالإنتاج. لمزيد من المعلومات، راجع ⁧⁩شروط الاستخدام التكميلية لمعاينات Microsoft Azure⁧⁩.

تحذير

يتمثل أحد القيود مع المكون الإضافي لفهرس Lucene في أنه لا يمكن تنفيذ عمليات البحث عبر الأقسام فقط في الفهرس - تحتاج Cassandra إلى إرسال الاستعلام إلى كل عقدة. يمكن أن يؤدي هذا إلى مشكلات في الأداء (الذاكرة وتحميل وحدة المعالجة المركزية) لعمليات البحث عبر الأقسام التي قد تؤثر على أحمال عمل الحالة الثابتة.

عندما تكون متطلبات البحث مهمة، نوصي بتوزيع مركز بيانات ثانوي مخصص لاستخدامه فقط لعمليات البحث، مع الحد الأدنى من عدد العقد، ولكل منها عدد كبير من الذاكرات الأساسية (16 كحد أدنى). يجب بعد ذلك تكوين مساحات المفاتيح في مركز البيانات الأساسي (التشغيلي) لنسخ البيانات نسخا متماثلا إلى مركز البيانات الثانوي (البحث).

المتطلبات الأساسية

  • إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.

  • نشر مثيل مدار من Azure لمجموعة Apache Cassandra. يمكنك القيام بذلك عبر المدخل - سيتم تمكين فهارس Lucene بشكل افتراضي عند نشر المجموعات من المدخل. إذا كنت ترغب في إضافة فهارس Lucene إلى نظام مجموعة موجود، فانقر في Update جزء نظرة عامة على المدخل، وحدد Cassandra Lucene Index، وانقر فوق تحديث للنشر.

    لقطة شاشة لتحديث خصائص نظام مجموعة Cassandra.

  • الاتصال بنظام المجموعة الخاص بك من CQLSH.

إنشاء بيانات باستخدام Lucene Index

  1. في نافذة الأوامر، CQLSH قم بإنشاء مساحة مفتاح وجدول كما يلي:

       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. الآن قم بإنشاء فهرس ثانوي مخصص على الجدول باستخدام Lucene Index:

       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. إدراج عينة التغريدات التالية:

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

التحكم في تناسق القراءة

  1. سيقوم الفهرس الذي أنشأته سابقا بفهرسة جميع الأعمدة في الجدول بالأنواع المحددة، وسيتم تحديث فهرس القراءة المستخدم للبحث مرة واحدة في الثانية. بدلا من ذلك، يمكنك تحديث جميع أجزاء الفهرس بشكل صريح باستخدام بحث فارغ مع التناسق ALL:

        CONSISTENCY ALL
        SELECT * FROM tweets WHERE expr(tweets_index, '{refresh:true}');
        CONSISTENCY QUORUM
    
  2. الآن، يمكنك البحث عن التغريدات ضمن نطاق تاريخ معين:

        SELECT * FROM tweets WHERE expr(tweets_index, '{filter: {type: "range", field: "time", lower: "2023/03/01", upper: "2023/05/01"}}');
    
  3. يمكن أيضا إجراء هذا البحث عن طريق فرض تحديث صريح لأجزاء الفهرس المعنية:

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

البحث عن البيانات

  1. للبحث في أفضل 100 تغريدة أكثر صلة حيث يحتوي حقل النص الأساسي على عبارة "انقر فوق ارتباطي" ضمن نطاق تاريخ معين:

        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. لتحسين البحث للحصول على التغريدات المكتوبة فقط من قبل المستخدمين الذين تبدأ أسماؤهم ب "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. للحصول على أحدث 100 نتيجة تمت تصفيتها، يمكنك استخدام خيار الفرز:

        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. يمكن أن يقتصر البحث السابق على التغريدات التي تم إنشاؤها بالقرب من موقع جغرافي:

        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. من الممكن أيضا فرز النتائج حسب المسافة إلى الموقع الجغرافي:

        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;
    

الخطوات التالية

في هذا التشغيل السريع، تعلمت كيفية البحث في Azure Managed Instance عن نظام مجموعة Apache Cassandra باستخدام Lucene Search. يمكنك الآن بدء العمل مع الكتلة: