there is of course situation where we cannot find best results based on search terms alone, if search term is short and common. how do we filter out 20 results to show to user if there are 1 million reasonably relevant results?
maybe instead of offering past behaviour or popularity based sorting, we should simply suggest user to define more accurate search term if needed. doing this on behalf of user makes user lazy and he/she does not even need to try to refine search terms to find accurate results.
you should not outsource smartness to the search provider. search provider should simply return most relevant matches to the search term.