Se volessi costruire qualcosa del genere da zero, useresti qualcosa chiamato TF/IDF:Term Frequency / Inverse document frequency. Ciò significa, per semplificare enormemente, trovare parole nella query che non sono comuni nel corpus nel suo insieme e trovare documenti che contengono quelle parole.
In altre parole, se qualcuno inserisce una query con le parole "Voglio comprare un elefante", allora delle parole nella query, la parola "elefante" è probabilmente la parola meno comune nel tuo corpus. "Compra" è probabilmente il prossimo. Quindi classifichi i documenti (nel tuo caso, le query precedenti) in base a quanto contengono la parola "elefante" e quindi a quanto contengono la parola "acquista". Le parole "I", "to" e "an" sono probabilmente in una stop-list, quindi le ignori del tutto. Classifichi ciascun documento (query precedente, nel tuo caso) in base al numero di parole corrispondenti (ponderazione in base alla frequenza inversa del documento, ovvero peso elevato per le parole non comuni) e mostri le prime poche.
Ho semplificato eccessivamente e avresti bisogno di leggere su questo per farlo bene, ma non è davvero terribilmente complicato da implementare in un modo semplice. La pagina di Wikipedia potrebbe essere un buon punto di partenza:
http://en.wikipedia.org/wiki/Tf%E2%80 %93idf