I don't really understand this approach. I don't think that even in my earliest days programming Java using object-oriented principles that I would have added "search" to a Product class. After all, search is not a behavior that products perform, rather it is a property of theirs... i.e. "I am searchable". I would have most likely make some kind of ProductIndex which consisted of a hashmap or something, mapping hashes of product strings to a list of their properties for easy lookup or something... This is one thing that immediately stands out to me.
Lo and behold, you created a ProductSearcher class. It seems to me that the initial approach stems not from the view that "objects are things" but rather the notion that any related property of an object should be included in the class definition of the object, which can be summed up as a misunderstanding of object-oriented programming more so than anything else, but maybe I'm looking at this the wrong way.
Interesting article, thanks for sharing.