Aracılığıyla paylaş


Azure DocumentDB'de metin dizinleriyle arama ve sorgulama

Azure DocumentDB'nin sağladığı temel özelliklerden biri, metin tabanlı verilerin verimli bir şekilde aranmasını ve sorgulanabilmesini sağlayan metin dizini oluşturmadır. Hizmet sürüm 2 metin dizinlerini uygular. Sürüm 2 büyük/küçük harf duyarlılığını destekler ancak aksan duyarlılığını desteklemez.

Azure DocumentDB'deki metin dizinleri, metin tabanlı sorguları iyileştirerek daha hızlı ve verimli hale getiren özel veri yapılarıdır. Belgeler, makaleler, açıklamalar veya yoğun metin içeren diğer veriler gibi metin içeriklerini işlemek için tasarlanmıştır. Metin dizinleri, metin tabanlı aramaların performansını geliştiren bir dizin oluşturmak için belirteç oluşturma, kök oluşturma ve durdurma sözcükleri gibi teknikleri kullanır.

Önkoşullar

  • Mevcut bir Azure DocumentDB kümesi

Metin dizini tanımlama

Kolaylık olması için aşağıdaki kuruluma sahip bir blog uygulaması örneğini ele alalım:

  • Veritabanı adı: cosmicworks
  • Koleksiyon adı: products

Bu örnek uygulama, makaleleri aşağıdaki yapıya sahip belgeler olarak depolar:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Metin dizini oluşturmak için createIndex yöntemini, text seçeneği ile title alanında kullanın.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Uyarı

    Koleksiyon başına yalnızca bir metin dizini tanımlayabilirsiniz ancak Azure DocumentDB, belgelerinizdeki farklı alanlarda metin aramaları gerçekleştirmenizi sağlamak için birden çok alanda metin dizinleri oluşturmanıza olanak tanır.

  2. İsteğe bağlı olarak, hem title hem de content alanlarında aramayı desteklemek için bir dizin oluşturun.

    db.products.createIndex({ title: "text", content: "text" })
    

Metin dizini seçeneklerini yapılandırma

Azure DocumentDB'deki metin dizinleri, davranışlarını özelleştirmek için çeşitli seçeneklerle birlikte gelir. Örneğin, metin analizi dilini belirtebilir, belirli alanların önceliğini belirlemek için ağırlıkları ayarlayabilir ve büyük/küçük harfe duyarlı olmayan aramaları yapılandırabilirsiniz. Aşağıda seçenekler içeren bir metin dizini oluşturma örneği verilmişti:

  1. İngilizce dil desteğine sahip ve titlecontent alanlarında aramayı desteklemek için bir dizin oluşturun. Ayrıca, arama sonuçlarında önceliklerini belirlemek için alana daha yüksek ağırlıklar title atayın.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Metin dizinlerindeki ağırlıklar

Metin dizini oluştururken, dizindeki tek tek alanlara farklı ağırlıklar atayabilirsiniz. Bu ağırlıklar, aramadaki her alanın önemini veya ilgi düzeyini temsil eder. Azure DocumentDB, bir metin arama sorgusu yürütürken arama terimlerine göre her belge için bir puan ve atanmış ağırlık hesaplar. Puan, belgenin arama sorgusuyla olan ilgi düzeyini temsil eder.

  1. hem hem title de content alanlarında aramayı desteklemek için bir dizin oluşturun. "Başlık" alanına 2, "içerik" alanına 1 ağırlık atayın.

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Uyarı

    İstemci "DocumentDB" terimiyle bir metin arama sorgusu gerçekleştirdiğinde, koleksiyondaki her belgenin puanı hem "başlık" hem de "içerik" alanlarında terimin varlığı ve sıklığına göre hesaplanır ve daha yüksek ağırlığı nedeniyle "başlık" alanına daha yüksek önem verilir.

Metin dizini kullanarak metin araması yapma

Metin dizini oluşturulduktan sonra, sorgularınızdaki "text" işlecini kullanarak metin aramaları yapabilirsiniz. Metin işleci bir arama dizesi alır ve ilgili belgeleri bulmak için bu dizeyi metin diziniyle eşleştirir.

  1. tümceciği DocumentDBiçin metin araması yapın.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. İsteğe bağlı olarak, ağırlığı görmek için sorguda $meta projeksiyon işlecini ve textScore alanını birlikte kullanın.

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Metin dizini bırakılıyor

MongoDB'de bir metin dizini bırakmak için, koleksiyondaki yöntemini kullanabilir dropIndex() ve kaldırmak istediğiniz metin dizini için dizin anahtarını veya adını belirtebilirsiniz.

  1. Anahtarı açıkça belirterek bir metin dizinini kaldırın.

    db.products.dropIndex({ title: "text" })
    
  2. İsteğe bağlı olarak, otomatik olarak üretilen benzersiz adı belirterek bir metin dizinini kaldırabilirsiniz.

    db.products.dropIndex("title_text")
    

Metin dizini sınırlamaları

  • Bir koleksiyonda yalnızca bir metin dizini tanımlanabilir.
  • Hint(), $text ifadesi kullanan bir sorguyla birlikte desteklenmez.
  • Sıralama işlemleri MongoDB'de metin dizininin sıralamasını kullanamaz.
  • Metin dizinleri görece büyük olabilir ve diğer dizin türlerine kıyasla önemli depolama alanı tüketebilir.

Sonraki adım