Looking for similar items in a large data set I have a large database of people and I want to show a small number of people who are similar to each person in the database. So if one of the people was Wolfgang Mozart I would want to show Beethoven, Haydn, Schubert etc based upon they are "similar" in that they are roughly contemporary with the same occupation (i.e. Composer). For each person, I have a short occupation which usually contains the nationality (e.g. Austrian composer, American actor, British politician) and dates of birth/death. 

Is there a recognised algorithm or technique to do something like this? I don't have a training set as I haven't manually produced any examples of what I want to see, so I don't think machine learning is appropriate.

If I had to write something right now I'd probably just do a string comparison and order so the closest contemporaries (i.e. dates of death) come first.

But is there a better way?
Consider the R package poLCA. Given a set of people with attributes that have categorical values, it can cluster the set into a fixed number of groups. As Anony-Mousse says above, it's not quite the same problem. Similarity would be to find people that are close to the one in the query. Clustering is close to answering that question for everybody. 

The name of the package gives some deeper insight into those differences. LCA is for latent class analysis. The idea is that there is some characteristic of the people in the dataset that can be used to group them into clusters, but it's not explicit in the variables you have. It's latent.