I think Alamy has found a good way to fight keyword spamming with their ranking system.
A contributor get an overall ranking value computed from a formula such as
nb of thumbnails views in search / (nb of click/zoom + nb of sales)
Search result is then ordered by taking this ranking into account (the lower, the better).
If a contributor use keywords spamming, the number of thumbnails view will increase dramatically first but not the number of click/sales as the buyers will just skip the irrelevant pictures. His/her pictures will thus drop quickly at the end of the search.
I guess it is not easy to implement such thing (but it should not be too difficult either), but it is a good idea IMHO.
Of cours, you then have to deal with robots which try to increase the ranking of a given contributor