I would include recommendation systems based on 'human generated lists'. See: http://www.google.com/patents/US8108417 I have developed these and they are far more powerful and relevant to the subjective user tastes involved with light-weight approaches related to collaborative filtering. An ensemble approach is absolutely the best while also keeping in mind that one user might think they've struck gold in terms of a result while another may not - recommendation systems are highly subjective. However, we had 50mil MAUs and 250mil searches every month and found out that there are ways to get around that. Some are psychological, for example, some users do not want to be 'told' or recommended something by someone else much less an algorithm - they would rather 'Discover' something. This depends on the product context. Is the product space related to music, shoes, books, dates etc. Labeling your recommendations as 'discoveries' works better in some cases, it depends on the user context and the product context.
Everything is a recommendation engine. Mimicking the way humans recommend things to other humans/friends is the ultimate way to build algorithms and architecture for recommendation systems.
One more thing, never forget to include a great spellchecking system, it's icing on the cake here.