Bir koleksiyondaki belirli dizeleri aramak için Cloud Firestore metin arama özelliklerini kullanın.
Başlamadan önce
Metin aramalarını kullanmaya başlamadan önce aşağıdakileri yapın:
Mevcut bir MongoDB uyumlu işlemler veritabanına erişiminiz olduğundan veya bir veritabanı oluşturup bu veritabanına bağlandığınızdan emin olun.
Metin dizininizin olduğundan emin olun veya metin dizini oluşturun.
Metin araması yapma
Metin aramalarında filtre içinde $text operatörü kullanılır.
Sorgulanan dizeyi $search bağımsız değişkeninde belirtin.
Genel bir metin araması yapma
Genel bir metin araması yapmak için aşağıdaki komutu çalıştırın:
# Find search
db.cities.find({ $text: { $search: "french bread" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "french bread" } } }
]);
Dizininiz bölümlendirilmişse aramanızda bölümü bir "ve" eşitlik filtresine dahil ederek bölüme göre filtreleme yapabilirsiniz.
Örneğin, city bölümünüz varsa metin aramasını aşağıdaki gibi filtreleyebilirsiniz:
db.myCollection.find( { $and: [
{ $text: { $search: "french bread" } },
{ "city": "Paris" }
] } )
Ayrıca, bir toplamayı bölüme göre de filtreleyebilirsiniz. Örneğin:
db.myCollection.aggregate([
{ $match: { $text: { $search: "french bread" } } },
{ "city": "Paris" }
] );
Bölümünüzün değeri bir dize olmalıdır. Bölüm filtreniz, "ve" kullanılarak metin aramanıza birleştirilmelidir.
Metin arama dilini ayarlama
$language bağımsız değişkenini kullanarak metin arama dilini ayarlayabilirsiniz. Örneğin:
db.cities.find({ $text: { $search: "french bread", $language: "en"} })
Dil ayarlamazsanız arama, metin dizininin dilini kullanır.
Tam terim arama
Tam bir terimi aramak için terimi çift tırnak içine alınmış bir kelime dizisi olarak yapılandırın. Örneğin:
# Find search
db.cities.find({ $text: { $search: "\"best french bread\"" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "\"best french bread\"" } } },
]);
Terim kombinasyonu arama
Metin aramanızı daha hassas hale getirmek için bir terim zinciri belirtin. Örneğin, aşağıdaki arama, best AND french AND ("bread" OR "is") kombinasyonuyla eşleşen dokümanları döndürür:
# Find search
db.cities.find({ $text: { $search: "\"best\" \"french\" bread is" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "\"best\" \"french\" bread is" } } },
]);
Bir terimi hariç tutma
Bir terimi metin aramasından hariç tutmak için terimin önüne kısa çizgi (-) ekleyin:
# Find search
db.cities.find({ $text: { $search: "best bread -french"} })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best bread -french" } } },
]);
Alaka düzeyi puanını hesaplama
Metin aramasıyla eşleşen dokümanların alaka düzeyini hesaplamak için {$meta: "textScore"} ifadesini kullanın. Sonuçları azalan puan sırasına göre sıralamak için sıralama ifadesinde $meta kullanın. Puan değerini depolamak için kullanılan alanın adı SCORE_FIELD olmak üzere aşağıdaki örnekleri inceleyin:
# Find search
db.cities
.find({ $text: { $search: "best french bread" } })
.sort({ SCORE_FIELD: { $meta: "textScore" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $sort: { "SCORE_FIELD": { $meta: "textScore"} } },
]);
Metin puanını tahmin ifadelerinde de kullanabilirsiniz. Örneğin:
# Find search
db.cities
.find({ $text: { $search: "best french bread" } })
.project({ score: { $meta: "textScore" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $project: { "scoreField": { $meta: "textScore"} } },
]);
Aramayı genişletme
$text operatörü, metin arama sonuçlarının alaka düzeyini artırmak için arama dizesini belirtilen dile göre genişleterek bağlama duyarlı eş anlamlılar, kök biçimler, yazımı düzeltilmiş terimler, aksanlı harf varyasyonları ve daha fazlasını içeren eşleşmeler ekler.
Sınırlamalar
$nearve$textoperatörleri aynı metin aramasında kullanılamaz.findveyaaggregationaraması başına tek bir$textoperatörüne izin verilir.- Toplama işlemlerinde,
$matchaşaması$textile ilk ardışık düzen aşaması olmalıdır. $textyalnızca$andve$oriçinde iç içe yerleştirilebilir.$text,$oriçinde yer alıyorsa arama dışı ayrıklar, aramayı optimize etmek için mevcut sıralı dizinleri kullanabilir. Diğer ayrıklar dizine eklenmemişse arama, koleksiyon taramasına dayanır.$textipuçlarıyla kullanılamaz.- Metin araması içeren sorgular
$naturalile sıralanamaz.