Una possibilità sarebbe quella di memorizzare tutte le varianti che ritieni possano essere utili come elemento dell'array, ma non sono sicuro se ciò sia possibile!
{
"number" : "pl",
"surface_form" : "skrejjen",
"surface_forms: [ "skrej", "skre" ],
"phonetic" : "'skrɛjjɛn",
"pattern" : "CCCVCCVC"
}
Probabilmente suggerirei anche di non memorizzare 1000 moduli di parole con ogni parola, ma di girarlo per avere documenti più piccoli. Più piccoli sono i tuoi documenti, meno MongoDB dovrebbe leggere in memoria per ogni ricerca (purché le condizioni di ricerca non richiedano una scansione completa ovviamente):
{
"word": {
"pos" : "N",
"lemma" : "skrun",
"gloss" : "screw",
},
"form" : {
"number" : "sg",
"surface_form" : "skrun",
"phonetic" : "ˈskruːn",
"gender" : "m"
},
"source" : "Mayer2013"
}
{
"word": {
"pos" : "N",
"lemma" : "skrun",
"gloss" : "screw",
},
"form" : {
"number" : "pl",
"surface_form" : "skrejjen",
"phonetic" : "'skrɛjjɛn",
"pattern" : "CCCVCCVC"
},
"source" : "Mayer2013"
}
Dubito anche che MySQL avrebbe prestazioni migliori qui con le ricerche di forme di parole casuali poiché dovrà eseguire una scansione completa della tabella proprio come sarebbe MongoDB. L'unica cosa che potrebbe aiutarti è una cache delle query, ma ovviamente è qualcosa che potresti creare nella tua interfaccia utente/API di ricerca nella tua applicazione.