There are two main types of knowledge-based recommendation engines: Constraint based and case based.
Case-based recommendation engines provide users with a way to interatively modify targets (e.g. cases) and results through the process of critiquing.
Specific cases are specificed by the user as starting points for the recommendation engine. This is how case-based recommendation engines do not have to deal with the cold-start problem.
Critiques range from simple, compound, and dynamic.
blah blah blah...
blah blah blah...
Constraint-based knowledge-based recommendtation engines users specify specific constraints (e.g. requirements). For example, they might indicate that they want a recipe that has the ingredient 'cheese', has fewer than 350 calories per serving, and has the word 'soup' in the title.
blah blah blah...
blah blah blah...
blah blah blah...
Finding the right similarity metrics
Symmetric vs assymetric metrics
diversity problem - bounded random selection strategy, bounded greedy selection strategy
Critiquing methods: simple critiques vs compound critiques vs dynamic critiques
Personalized (e.g. user profile) most knowledge-based recommendation engines do not have user profiles, so that if you come to a knowledge-based recommendation at different types with the exact same queries then you get the exact same results every time.
There are two main types of technologies used: string filtering and database queries.
Simple filtering is one of the most basic forms of recommendation engines. It simply removes (i.e. filters out) unwanted content. It works by doing text comparisons.
For example, if you have a list of 50 recipes then you can type in a input box text to only list the recipes that contain that text.
Simple and easy to understand (with just a few filters). Also, it is quick to code because it is doing simple logical comparisons of every recipe to see if it matches the input.
All the data (e.g. the recipes in this example) are easily accessed (i.e. stolen) because the data is just a JSON file. Also, all the code (JavaScript) is in plan sight and also easily accessed.
As more filters are added, (e.g. filters on ingredients, submitter, ratings, etc.) the programming code quickly becomes more complicated quickly.
In general, this is a poor recommendation engine because it does not use any intelligence (e.g. no machine learning is involved).
Database querying is a more advanced form of filtering. It is often performed with a set of front-end technologies (e.g. HTML, JavaScript, AJAX, and CSS) and back-end technologies (e.g. PHP) in order to access a database.
By utilizing a database more powerful searches can be performed over simple string filtering.
A straight forward appoach to searching for things (i.e. recipes) that you know exactly what you are looking for.
Due to the increased sophistication of a database, programmers need to be familiar with SQL and keep their back-end databases up to date.
In the strictest terms, a database query does not really "recommendation" anything, it only returns results on what you are looking for. In other words, it does not recommend items that would be good or close matches. For example, if your focus was on garlic and onions then your results would never return recipes with shallots (unless there was onion or garlic in the recipes too). However, suggesting a recipe with shallots (which are similiar to onions and garlic) are beyond the ability of database queries. However, that is something that a content-based recommendation engine would do.