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
- MongoDB için mevcut bir Azure Cosmos DB sanal çekirdek kümesi.
- Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
- Mevcut bir Azure aboneliğiniz varsa MongoDB sanal çekirdek kümesi için yeni bir Azure Cosmos DB oluşturun.
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
}
createIndex
alanında metin dizinititle
oluşturma seçeneğiyletext
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.
İ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:
İ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ıklartitle
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.
hem hem
content
detitle
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.
tümceciği
Cosmos DB
için metin araması yapın.db.products.find( { $text: { $search: "Cosmos DB" } } )
İ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.
Anahtarı açıkça belirterek bir metin dizini bırakın.
db.products.dropIndex({ title: "text" })
İ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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin