Metin arama özelliğini kullanma

Bir koleksiyondaki belirli dizeleri aramak için Cloud Firestore uygulamasındaki metin arama özelliklerini kullanın.

Başlamadan önce

Metin aramalarını kullanmaya başlamadan önce aşağıdakileri yapın:

  1. Mevcut bir MongoDB uyumlu operasyon veritabanına erişiminiz olduğundan emin olun veya veritabanı oluşturup bu veritabanına bağlanın.

  2. Metin dizininiz olduğundan emin olun veya metin dizini oluşturun.

Metin aramalarında, filtre içinde $text operatörü kullanılır. Sorgulanan dizeyi $search bağımsız değişkeninde belirtin.

Genel 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ümlere ayrılmışsa bölümü aramanızdaki 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" }
] } )

Birleştirmeyi bir 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 eklenmelidir.

Metin arama dilini ayarlama

Metin arama dilini $language bağımsız değişkenini kullanarak ayarlayabilirsiniz. Örneğin:

  db.cities.find({ $text: { $search: "french bread", $language: "en"} })

Dil ayarlamazsanız arama, metin dizininin dilini kullanır.

Tam eşleşen bir terimi 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 aramayla eşleşen dokümanların alaka düzeyi puanını 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. SCORE_FIELD ifadesinin, puan değerini depolamak için kullanılan alanın adı olduğu 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"} } },
  ]);

Yansıtma ifadelerinde metin puanını da 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"} } },
  ]);

$text operatörü, metin arama sonuçlarının alaka düzeyini artırmak için arama dizesini belirtilen dile göre genişletir. Bu sayede, içeriğe duyarlı eş anlamlılar, kök biçimler, yazımı düzeltilmiş terimler, aksan varyasyonları ve daha fazlası için eşleşmeler dahil edilir.

Sınırlamalar

  • $near operatörleri ve $text operatörleri aynı metin aramasında kullanılamaz.
  • find veya aggregation araması başına tek bir $text operatörüne izin verilir.
  • Toplamalarda, $text içeren $match aşaması ilk ardışık düzen aşaması olmalıdır.
  • $text yalnızca $and ve $or içine yerleştirilebilir.
  • $text, $or içindeyse 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.
  • $text, ipuçlarıyla kullanılamaz.
  • Metin araması içeren sorgular $natural ölçütüne göre sıralanamaz.