Aracılığıyla paylaş


MongoDB için Azure Cosmos DB sanal çekirdeğinde metin dizinleriyle arama ve sorgulama

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB sanal çekirdeği

MongoDB sanal çekirdeği için Azure Cosmos DB'nin sağladığı temel özelliklerden biri, metin tabanlı verilerin verimli bir şekilde aranmasını ve sorgulanabilmesini sağlayan metin dizini oluşturma özelliğidir. 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.

MongoDB için Azure Cosmos DB'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

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 Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. createIndex alanında metin dizini title oluşturma seçeneğiyle text yöntemini kullanın.

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

    Not

    Koleksiyon başına yalnızca bir metin dizini tanımlayabilirsiniz ancak MongoDB için Azure Cosmos DB sanal çekirdeği, 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 ve title 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

MongoDB için Azure Cosmos DB'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 title content 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. MongoDB için Azure Cosmos DB sanal çekirdeği, bir metin arama sorgusu yürütürken arama terimlerine göre her belge için bir puan ve atanan ağırlıkları hesaplar. Puan, belgenin arama sorgusuyla olan ilgi düzeyini temsil eder.

  1. hem hem content de title 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 } }
    )
    

    Not

    İstemci "Cosmos DB" 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 Cosmos DBiçin metin araması yapın.

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

    db.products.find(
        { $text: { $search: "Cosmos DB" } },
        { 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 dizini bırakın.

    db.products.dropIndex({ title: "text" })
    
  2. İsteğe bağlı olarak, otomatik olarak oluşturulan benzersiz adı belirterek bir metin dizini bırakın.

    db.products.dropIndex("title_text")
    

Metin dizini sınırlamaları

  • Bir koleksiyonda yalnızca bir metin dizini tanımlanabilir.
  • Metin dizinleri basit metin aramalarını destekler ve normal ifade aramaları gibi gelişmiş arama özellikleri sağlamaz.
  • 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