Don't most search engines use an inverted index to find the similarity between the query vector and the document vectors? (instead of doing the dot product with every document)
Maybe something like this could help: http://radimrehurek.com/gensim/similarities/docsim.html
Cool stuff, thanks.