atlas-search-guide
atlas-search-guide copied to clipboard
Reference of foundations and common patterns in Atlas Search.
Full Text Search Directly in your Database
Build fast, relevant, full-text search capabilities on top of your data in the cloud
This Full Text Search Guide teaches the foundations and enhancements, so you can build large-scale full text search applications without managing indexes, hardware or replication.
🌩️ Foundations - Start with building a full text search application from scratch in under 100 lines of Python code, then continue to apply additional search-native functions like autocomplete, scoring, highlighting and more.
🌌 Patterns & Use Cases - Combine your knowledge from Foundations and apply it to solve actual business problems. Examples include real world use cases such as relevance score boosting in a restaurant search engine.
🍱 Architecture - Full Text Search doesn't live in a bubble, the data needs to come in and often out as well. Learn how others integrate technologies such as Kafka and S3 into their Full Text Search stack to scale effortlessly.
📦 Miscellaneous - Other content that didn't fit the categories above. This includes examples on using the API to create custom synonym mapping layers, testing search index consistency latency, and more.
Search Foundations
| # | Label | Description |
|---|---|---|
| 1 | Engine | Review the basic components of a full-text search engine (including tokenization), and build one. |
| 2 | Basic | Run a simple text search. |
| 3 | Fuzzy | Handle common typos |
| 4 | Highlighting | Add a relevance score and hit highlights to the results |
| 5 | Autocomplete | Search as you type |
| 6 | Phrase | Ordered sequence of words |
| 7 | Diacritics | Include multiple languages |
| 8 | Compound | Combine two or more operators into a single query (or clause) |
| 9 | Explain | Understand how the mongot (lucene) returns results in order to tune performance. |
| 10 | Count | Return a count of the documents returned. |
Search Patterns & Use Cases
| # | Label | Description |
|---|---|---|
| 1 | Multi Tenant // Shard Targeting | Ability to build search applications that limit what an end user can search for based on their tenancy. |
| 2 | Weighted Fields | Implement relevance weights where some fields more important than other fields. |
| 3 | Advanced Scoring | Ensure the boosted variable doesn’t overwhelm the relevance of our search results. |
| 4 | Sorting | Using the Atlas Search near operator to sort documents based on a numeric, date, or geo field. |
| 5 | Synonyms | Implement a synonym-based search functionality |
| 6 | Multi Collection Search | Run a search query that spans multiple collections |
| 7 | Faceting | Dynamically cluster search results into categories in order to drill down |
| 8 | Custom Analyzers | Building our own custom analyzers to satisfy different app requirements |
| 9 | Automated Search Tuning | |
| 10 | Autocomplete With Synonyms | |
| 11 | Saved Searches | |
| 12 | Flexible Querying | The ability to combine multiple indexes to perform performant queries. |
End to End Code Demos
| # | Source | Description |
|---|---|---|
| 1 | MongoRX | GraphQL with custom Resolver |
| 2 | Auto-Tuning | Using synonyms, auto-improve your search results |
| 3 | Restaurant Finder | Restaurant finder app that showcases search queries |
Example Search Architecture
| # | Label | Description |
|---|---|---|
| 1 | Event Streaming | Using Realm and Kinesis, initiate a workflow where as documents are updated, they're pushed to a Kinesis queue and then pushed to Atlas to be searched. |
Miscellaneous
| # | Label | Description |
|---|---|---|
| 1 | Index Creation API | Using REST to modify Search indexes |
| 2 | Index Speed Test | How long does it take to create an index and return a search result? |
Credits
This project is made possible by the community surrounding it and especially the wonderful people and projects listed in this document.