Ciao, non ho alcuna esperienza nello sviluppo di motori di ricerca ma per logica io farei il ragionamento esattamente al contrario di quanto hai indicato tu.
Cioè partirei da una lista di termini ricercabili (quelli che possono essere usati per la ricerca), ognuno dei quali sarà un vettore che può contenere uno o più termini come corrispondenze risultanti.

Quindi:

aperto = [casa,villa]
appartamento = [casa]
cemento = [casa]
erba = [villa]
gioco = [villa]
mattoni = [casa]

A questo punto, con la ricerca "aperto, mattoni" si otterrà: casa, villa, casa

Ovvero 2 casa e 1 villa.
Per cui la priorità andrà su casa perché ha un numero maggiore di corrispondenze.

Ripeto, non mi intendo minimamente di algoritmi di ricerca. La mia è solo un'idea ed è possibile che sia inadeguata o che ci siano comunque soluzioni più indicate.

Riguardo le Regex non è detto che "tasti" abbia per forza una corrispondenza con "tastiera", dipende tutto dall'impostazione del pattern di ricerca.

Ad ogni modo, a prescindere dall'algoritmo che intendi adottare, con HTML ci fai ben poco.
Quindi, quale/i linguaggio/i di programmazione stai usando o intendi usare?
Nel caso bisognerebbe chiedere di far spostare la discussione sul relativo forum.