Bu bölümde, SQL'in "like" operatöründen farklı olan MongoDB'nin tam metin aramasını tanıtacağız. MongoDB'nin tam metin araması, SQL'deki "like" operatörünün uygulanmasına kıyasla metin araması için daha verimlidir.

Test verilerini hazırlayın

Mağazalar koleksiyonuna birkaç kayıt ekleyin

db.stores.insert(
   [
     { _id: 1, name: "Java Hut", description: "Kahve ve pasta" },
     { _id: 2, name: "Burger Ekmekleri", description: "Gurme hamburgerler" },
     { _id: 3, name: "Kahve Dükkanı", description: "Sadece kahve" },
     { _id: 4, name: "Kıyafetler Kıyafetler Kıyafetler", description: "İndirimli giyim" },
     { _id: 5, name: "Java Alışveriş", description: "Endonezya malları" }
   ]
)

Metin indeksi oluşturun

Tam metin arama yeteneğini kullanabilmek için bir metin indeksi oluşturmanız gerekmektedir. Örnek:

db.stores.createIndex( { name: "text", description: "text" } )

Açıklama:

  • Ad ve açıklama alanları için metin türü indeksi oluştur.

Not: Bir koleksiyon sadece bir metin indeksine izin verir, ancak bir metin indeksi birden fazla alanı içerebilir.

$text operatörü

Metin araması için $text operatörünü kullanın.

Sözdizimi:

{ $text: { $search: "arama anahtarı" } }

Örnek:

db.stores.find( { $text: { $search: "java kahve dükkanı" } } )

Açıklama:

  • Ad ve açıklama alanlarında "kahve", "dükkanı" ve "java" anahtar kelimeleri içeren belgeleri ara.

Çıktı:

{ "_id" : 3, "name" : "Kahve Dükkanı", "description" : "Sadece kahve" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Kahve ve pasta" }
{ "_id" : 5, "name" : "Java Alışveriş", "description" : "Endonezya malları" }

Frazelerle arama

db.stores.find( { $text: { $search: "\"kahve dükkanı\"" } } )

Çıktı

{ "_id" : 3, "name" : "Kahve Dükkanı", "description" : "Sadece kahve" }

İlgiliği Sıralama

Varsayılan olarak, $text sorgusunun sonuçları sırasızdır. $text sorgusu, her belgenin ilgili olma puanını (textScore) hesaplar. Bu puanı kullanarak belgeleri sıralayıp daha yüksek ilgili olan belgeleri en üste çıkarabiliriz.

db.stores.find(
   { $text: { $search: "java kahve dükkanı" } },
   { score: { $meta: "textScore" } }  // textScore ilgili puanını döndürmek için bildirin
).sort( { score: { $meta: "textScore" } } ) // textScore'u kullanarak sıralama belirtin

Not: MongoDB tam metin araması Çincedeki ifadeler için çok iyi destek sağlamamaktadır.