MongoDB Text Search

In MongoDB, text search is a technology used to search for text data. MongoDB provides powerful text search functionality that allows us to search for documents containing specific keywords.

Basic Concepts

How Text Search Works

MongoDB's text search functionality is implemented based on text indexes. When we create a text index on a collection, MongoDB automatically tokenizes the content of the text fields and creates an index. When we perform a text search, MongoDB uses the text index to quickly find documents containing specific keywords.

Types of Text Indexes

  1. Single Field Text Index: A text index created on a single field.
  2. Multiple Fields Text Index: A text index created on multiple fields.
  3. All Fields Text Index: A text index created on all fields.

Creating Text Indexes

Single Field Text Index

// Create a text index on a single field
db.articles.createIndex({ title: "text" })

Multiple Fields Text Index

// Create a text index on multiple fields
db.articles.createIndex({ title: "text", content: "text" })

All Fields Text Index

// Create a text index on all fields
db.articles.createIndex({ "$**": "text" })

Basic Query

// Query documents containing "MongoDB"
db.articles.find({ $text: { $search: "MongoDB" } })

Multiple Keywords Query

// Query documents containing "MongoDB" or "Node.js"
db.articles.find({ $text: { $search: "MongoDB Node.js" } })

Excluding Keywords Query

// Query documents containing "MongoDB" but not containing "Node.js"
db.articles.find({ $text: { $search: "MongoDB -Node.js" } })

Exact Match Query

// Query documents containing the phrase "MongoDB Node.js"
db.articles.find({ $text: { $search: "\"MongoDB Node.js\"" } })

Query Optimization

Sorting Results

// Query documents containing "MongoDB" and sort by relevance
db.articles.find(
  { $text: { $search: "MongoDB" } },
  { score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })

Limiting Results

// Query documents containing "MongoDB" and limit the number of results returned
db.articles.find(
  { $text: { $search: "MongoDB" } },
  { score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } }).limit(10)

Best Practices for Text Indexes

Choose the Right Fields

We should choose fields that contain text content to create text indexes. Avoid creating text indexes on fields that do not contain text content, as this will waste storage space and query time.

Avoid Creating Too Many Text Indexes

Although text indexes can improve query performance, creating too many text indexes can cause performance degradation of insert, update, and delete operations. Therefore, we should only create necessary text indexes.

Maintain Text Indexes Regularly

We should maintain text indexes regularly, such as deleting unused text indexes or optimizing the structure of text indexes.

Summary

In MongoDB, text search is a technology used to search for text data. MongoDB provides powerful text search functionality that allows us to search for documents containing specific keywords. Text indexes are the foundation for implementing text search, and we can create text indexes on a single field, multiple fields, or all fields. When using text search, we should pay attention to choosing the right fields, avoiding creating too many text indexes, and maintaining text indexes regularly to ensure the performance and efficiency of queries.