Data Types
==========

* `Title`: string
* `Keywords`: string
* `Description`: string

Search Requirements:
====================

1. ALL search terms MUST be found somewhere in the title or keywords or description
	* Don’t search the whole DOCUMENT for terms… but search SEVERAL FIELDS to find a match for the terms.
		+ All the fields don’t need to contain all the search terms, but all the search terms must be found
		+ EG: searching for “bake cake” should match:
			- title contains “cake” and description contains “bake” so that BOTH terms are found
		+ Because atlas search grammar did not allow us to do that, we created a concat field: title + keywords into a NEW field
		+ The biggest problem we have seems to follow from the fact that we cannot get a good AND clause on our search terms
			- “bake cake” should match “bake” AND “cake”, instead, using Atlas search without our hacks we will get
			- “cake cake cake cake” and that ranks higher than “cake bake”!
2. Field boosting is important
	* Matching in the “title” should rank higher than matching in the “description”
3. Word order matters
	* “bake cake” should boost results where “bake” precedes “cake”
	* A perfect match is preferred
4. Keyword stuffing should be penalised.
	* After computing a score, the score should be un-boosted based on frequency of matching the search terms
	* “bake cake” should rank “bake a cake” HIGHER than “bake a cake bake a cake cake cake cake”
5. Shorter data should rank higher
	* “cake” as a search term should rank
		+ “cake fun” higher than
		+ “cake and fun and baking and frosting”
		+ Because all else equal, the first string is SHORTER than the second string
6. Stemming matters (plurals in particular)
	* this currently does NOT work in our current implementation b/c we had to hack around Atlas to get proper AND matching for search terms

I have tried to achieve the above by using MongoDB Atlas, but have not been successfull. Hence I am looking at alternatives such as ElasticSearch, Solr etc for the same. I am also open to evaluating any other similar platform as well.