Data Modeling for Search
https://www.mongodb.com/developer/products/atlas/data-modeling-for-search/
Techniques
consistent field types
Schema matters! A price
is a number, never a string
!!
Nested documents
Avoid embeddedDocuments
when:
- There's only one field in them
- Matching on a flattened structure suffices
Entity pattern
"Data that is searched together is stored together" - sound familiar?
Documents represent what your application wants, so that the power of relevancy ranking and one to one capabilities of lexical analysis and matching tricks can work with field mappings and queries comfortably.
For example: if cast
are first class citizens for the users, model them as such, and then search works well.
This pattern represents "entities" (in whatever way you want to define them) in a simple typed schema.
This is much like the Single Collection Pattern: https://www.mongodb.com/developer/products/mongodb/single-collection-pattern/
Entity documents
_id
: unique identifier (as universal as possible, ideally)
type
: a simple string value of your choosing: "cast", "genre", "title", or ... TBD
name
: what do you call this thing? how would people find it? what is it called in words?
<etc>
: any other useful fields needed for sorting, matching, filtering, ranking, or display
- Tips:
$merge
can be your good friend!
{
"mappings": {
"dynamic": false,
"fields": {
"metadata": [
{
"type": "document",
"dynamic": true
}
]
}
}
}