MongoDB Academy · Pelajaran

Menjalankan Pertanyaan $text Dengan Frasa dan Penafian

Pelajar akan membuat pertanyaan dengan $text menggunakan frasa dalam tanda petikan, istilah yang dinafikan dan ungkapan berbilang perkataan, serta meneliti cara MongoDB memadankan dokumen.

Pelajaran 2 daripada 413 langkah

Menjalankan Pertanyaan $text Dengan Frasa dan Penafian ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Operator Pertanyaan $text

Setelah indeks teks wujud, anda menjalankan carian kata kunci dengan operator $text dalam penapis find(). Nilainya ialah objek dengan rentetan $search yang mengandungi perkataan atau frasa yang anda cari. MongoDB memecahkan rentetan carian anda kepada token dengan cara yang sama seperti medan terindeks, kemudian mengembalikan dokumen yang sekurang-kurangnya satu medan terindeksnya mengandungi token yang sepadan.

// Simple keyword search
db.articles.find({ $text: { $search: 'mongodb index' } });

// This returns documents that contain 'mongodb' OR 'index'
// (or their stemmed variants) in any indexed field

Carian Berbilang Perkataan: Semantik OR

Secara lalai, carian $text dengan beberapa perkataan menggunakan semantik OR: dokumen sepadan jika mengandungi mana-mana perkataan tersebut. Jadi, 'mongodb index' mengembalikan dokumen yang mengandungi 'mongodb' atau 'index' atau kedua-duanya. Skor kerelevanan (textScore) lebih tinggi bagi dokumen yang mengandungi lebih banyak istilah carian, tetapi semua dokumen yang sepadan tetap dikembalikan.

// OR semantics: matches docs with 'mongodb' OR 'index'
db.articles.find(
  { $text: { $search: 'mongodb index' } },
  { score: { $meta: 'textScore' }, title: 1 }
).sort({ score: { $meta: 'textScore' } });

// Documents with BOTH words score higher and appear first

Carian Frasa dengan Tanda Petikan Berganda

Untuk mewajibkan frasa tepat, apit frasa itu dengan tanda petikan berganda yang diescape dalam rentetan $search. Carian frasa memerlukan perkataan muncul bersama-sama dan dalam susunan tersebut. Dokumen yang hanya mengandungi sebahagian perkataan frasa tetapi bukan urutan tepat tidak akan sepadan. Carian frasa lebih tepat, tetapi mungkin terlepas dokumen yang berkaitan dengan susunan perkataan yang sedikit berbeza.

// Phrase search: 'database index' must appear as a phrase
db.articles.find({
  $text: { $search: '"database index"' }
});

// Only matches documents where 'database' and 'index'
// appear together as a phrase, not just anywhere in the text

// Combined phrase and keyword:
db.articles.find({
  $text: { $search: '"database index" mongodb' }
});

Penafian dengan Tanda Minus

Awali perkataan dengan tanda minus (-) untuk mengecualikan dokumen yang mengandungi perkataan tersebut. Anda tidak boleh menggunakan penafian sahaja—anda mesti menggabungkannya dengan sekurang-kurangnya satu istilah carian positif. Penafian berguna apabila kata kunci terlalu umum dan anda mahu menapis keluar makna tertentu yang tidak dikehendaki, seperti 'java -coffee' untuk mencari artikel pengaturcaraan tentang Java, bukan minuman tersebut.

// Exclude results containing 'relational'
db.articles.find({
  $text: { $search: 'database -relational' }
});

// Find NoSQL content but exclude SQL mentions
db.articles.find({
  $text: { $search: 'nosql document store -sql -table' }
});

Menggabungkan Frasa dan Penafian

Anda boleh menggabungkan frasa, kata kunci dan penafian secara bebas dalam satu rentetan $search. MongoDB memproses setiap istilah secara berasingan: kumpulan bertanda petikan ialah carian frasa, perkataan berawalan minus ialah pengecualian, dan perkataan biasa yang selebihnya ialah padanan kata kunci pilihan. Keupayaan menggabungkan unsur ini membolehkan anda menyatakan logik carian yang sederhana kompleks tanpa enjin carian khusus.

// Find articles about 'index tuning' that mention 'mongodb'
// but exclude anything about 'elasticsearch'
db.articles.find({
  $text: {
    $search: '"index tuning" mongodb -elasticsearch'
  }
});

Tidak Peka Huruf Besar dan Kecil

Carian $text adalah tidak peka huruf besar dan kecil secara lalai. MongoDB menukarkan semua token kepada huruf kecil semasa pengindeksan dan carian, jadi 'MongoDB', 'MONGODB' dan 'mongodb' semuanya sepadan dengan token terindeks yang sama. Anda tidak perlu menormalkan masukan carian sebelum menjalankan pertanyaan $text.

// All three queries return the same results
db.articles.find({ $text: { $search: 'MongoDB' } });
db.articles.find({ $text: { $search: 'MONGODB' } });
db.articles.find({ $text: { $search: 'mongodb' } });

Pilihan $language

Secara lalai, $text menggunakan bahasa yang dikonfigurasikan pada indeks teks. Anda boleh mengatasinya bagi setiap pertanyaan dengan pilihan $language. Ini berguna untuk koleksi kandungan berbilang bahasa yang dokumennya disimpan dalam bahasa berbeza dan perlu dicari menggunakan senarai kata henti serta algoritma pengakaran yang sesuai.

// Override language for a specific search
db.articles.find({
  $text: {
    $search: 'base de datos',
    $language: 'spanish'
  }
});

// Or disable stop words and stemming entirely
db.articles.find({
  $text: {
    $search: 'databases',
    $language: 'none'  // exact token match, no stemming
  }
});

Pilihan $caseSensitive

Walaupun carian tidak peka huruf besar dan kecil ialah tetapan lalai, anda boleh mendayakan carian teks peka huruf besar dan kecil dengan $caseSensitive: true. Ini jarang diperlukan, tetapi berguna apabila kandungan anda mempunyai pengecam yang membezakan huruf besar dan kecil seperti nama kelas atau nama perintah. Nota: carian teks peka huruf besar dan kecil jauh lebih perlahan kerana tidak dapat menggunakan entri indeks yang telah ditukar kepada huruf kecil.

// Case-sensitive search (slower)
db.docs.find({
  $text: {
    $search: 'MongoDB',
    $caseSensitive: true  // 'mongodb' would NOT match
  }
});

// Case-insensitive (default, fast)
db.docs.find({
  $text: { $search: 'mongodb' }  // matches MongoDB, MONGODB, mongodb
});

Pilihan $diacriticSensitive

Secara lalai, carian teks MongoDB adalah tidak peka diakritik: 'café' dan 'cafe' dianggap sebagai perkataan yang sama. Anda boleh mendayakan $diacriticSensitive: true untuk membezakan aksara beraksen. Ini penting bagi bahasa seperti Perancis, Jerman atau Sepanyol yang maknanya berubah mengikut diakritik. Seperti kepekaan huruf besar dan kecil, carian peka diakritik lebih perlahan kerana memintas entri indeks yang telah dinormalkan.

// Diacritic-insensitive (default)
db.articles.find({ $text: { $search: 'cafe' } });
// Matches: 'cafe', 'café', 'cáfe'

// Diacritic-sensitive
db.articles.find({
  $text: {
    $search: 'cafe',
    $diacriticSensitive: true
  }
});
// Only matches: 'cafe' (not 'café')

Carian Teks dalam Saluran Pengagregatan

Anda boleh menggunakan $text dalam saluran pengagregatan dengan meletakkan peringkat $match yang mengandungi penapis teks sebagai peringkat pertama sekali. Ini membolehkan MongoDB menolak carian teks ke indeks sebelum menggunakan peringkat saluran seterusnya. Kemudian, anda boleh memproyeksikan textScore, mengumpulkan hasil mengikut kategori atau mengehadkan bilangan padanan—semuanya pada pelayan.

db.articles.aggregate([
  // MUST be the first stage to use the text index
  { $match: { $text: { $search: 'mongodb aggregation' } } },
  { $addFields: { score: { $meta: 'textScore' } } },
  { $sort: { score: -1 } },
  { $limit: 10 },
  { $project: { title: 1, score: 1, category: 1 } }
]);

Mengira Hasil Carian Teks

Untuk mengira bilangan dokumen yang sepadan dengan pertanyaan teks, gunakan countDocuments() bersama-sama penapis $text atau tambahkan peringkat $count pada penghujung saluran pengagregatan. Elakkan menggunakan count() kerana ia sudah tidak digunakan, dan ambil perhatian bahawa estimatedDocumentCount() tidak boleh menerima penapis—sentiasa gunakan countDocuments() untuk kiraan yang ditapis.

// Count matching documents
const total = await db.articles.countDocuments({
  $text: { $search: 'mongodb tutorial' }
});
console.log('Matches:', total);

// In an aggregation pipeline
db.articles.aggregate([
  { $match: { $text: { $search: 'mongodb tutorial' } } },
  { $count: 'total' }
]);

Semakan Pantas

Uji pemahaman anda tentang pilihan pertanyaan $text daripada pelajaran ini.

Ulang Kaji Pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: perkataan biasa menggunakan semantik OR dan sepadan dengan mana-mana istilah carian, frasa bertanda petikan berganda memerlukan urutan perkataan yang tepat, dan perkataan berawalan minus mengecualikan dokumen yang mengandungi istilah tersebut. Seterusnya, kita akan mengisih hasil mengikut skor kerelevanan teks menggunakan $meta.

Percuma untuk bermula

Pelajari JavaScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Menjalankan Pertanyaan $text Dengan Frasa dan Penafian” percuma?

Ya — teks penuh “Menjalankan Pertanyaan $text Dengan Frasa dan Penafian” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menjalankan Pertanyaan $text Dengan Frasa dan Penafian”?

Pelajar akan membuat pertanyaan dengan $text menggunakan frasa dalam tanda petikan, istilah yang dinafikan dan ungkapan berbilang perkataan, serta meneliti cara MongoDB memadankan dokumen. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Menjalankan Pertanyaan $text Dengan Frasa dan Penafian” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?

Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mencipta Indeks Teks pada Medan Rentetan
  2. Menjalankan Pertanyaan $text Dengan Frasa dan Penafian
  3. Mengisih Mengikut Skor Teks Dengan $meta
  4. Had Indeks Teks dan Masa untuk Menggunakan Carian Atlas
← Kembali ke MongoDB Academy