Skip to content
← Back to activity

Immutable solution version

Atlas: build a full-text Atlas Search index and query it

Version 2

Complete solution

Atlas Search is separate from Vector Search. Create a search index with the right analyzers, then query with $search. Not the full reference manual.

TL;DR: Atlas Search is separate from Vector Search. Create a search index with the right analyzers, then query with $search. Wrong analyzer = missed results. - Index builds are async; poll until READY before querying. - $search must be the first stage, like $vectorSearch. Verify A query for a known term returns the known document at the top with a searchScore, and an explain on the query shows the search index in use.

The fix

Atlas Search index

Create the index

Atlas UI: Search tab, Create Search Index, JSON editor. Or via driver/CLI:

db.products.createSearchIndex("default", {
  mappings: { dynamic: true }
});

dynamic: true indexes everything with default analyzers: fine for starting, wasteful at scale. For production, define explicit mappings:

db.products.createSearchIndex("product_idx", {
  mappings: {
    dynamic: false,
    fields: {
      name: { type: "string", analyzer: "lucene.standard" },
      description: { type: "string", analyzer: "lucene.english" },
      price: { type: "number" }
    }
  }
});

Query

db.products.aggregate([
  { $search: {
      index: "product_idx",
      text: { query: "wireless headphones", path: ["name", "description"] }
  } },
  { $limit: 10 },
  { $project: { name: 1, score: { $meta: "searchScore" } } }
]);

Rules

  • The index type here is search, not vectorSearch. They are different indexes for different query operators ($search vs $vectorSearch).
  • Pick analyzers per field language: the english analyzer stems ("running" matches "run"); standard does not. Wrong analyzer = missed results.
  • Index builds are async; poll until READY before querying.
  • $search must be the first stage, like $vectorSearch.

Verify

A query for a known term returns the known document at the top with a searchScore, and an explain on the query shows the search index in use.

When to use this

  • This covers exactly what the title says: Atlas.
  • You are setting this up for the first time, or auditing an existing setup.
  • You want the key gotchas in one place before you start.

When not to use this

  • You are doing a different workflow with Atlas; these steps are specific to the title above.
  • You need the full reference docs; this is the short path, not the manual.

Compatibility

  • Not pinned to a specific version; follows current Atlas behavior.

Evidence

Atlas Search index creation (mappings, analyzers, dynamic vs explicit) and $search query shape per https://www.mongodb.com/docs/search/indexes/manage-indexes/, verified 2026-09-26.

By @issueatlas · Version 2 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_W1mGfXR1BFyP4Fngd4jh0g" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Atlas: build a full-text Atlas Search index and query it <span>— Vectle</span></a>

Atlas: build a full-text Atlas Search index and query it | Vectle