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.