For the most simple of searching through text, one might use a program such as Unix's grep command. It's not terribly sophisticated, but it and such variants as agrep (for doing "approximate" pattern matching) or sgrep (for searching SGML documents) are nonetheless tremendously useful for searching for things, particularly when composed with other commands.
Many "search engines" have been designed to index hierarchies of text database material, and provide far more sophisticated tools to query information.
Remembrance Agent Experiments in 2020
The existing RA software (such as the old one below that integrated with Emacs) has grown dated, particularly in view that a lot of research work has been going on with text search. The above blog entry describes some recent work that suggests that it's difficult to get relevance, which is what I found when I used RA.
The problem is that it is difficult to arrive at actually relevant material, in that you need:
Enough local material to represent a query, and it is difficult to infer "user intent."
A sizable corpus of material to search which needs to be somewhat local.
When I used this against a sizable MH mailbox, that was enough to be somewhat useful, but I don't think even my mailbox was really big enough
Remembrance Agent source code in C and Emacs LISP is available; RA integrates with the Emacs editor to automagically retrieve data that is "related" to whatever you're working on now.
A Gnome tool written using Mono ; see also Beagle search tool.
KDE tools for Beagle have appeared; note: