Une possibilité serait de stocker toutes les variantes qui, selon vous, pourraient être utiles en tant qu'élément de tableau - mais je ne sais pas si cela est possible !
{
"number" : "pl",
"surface_form" : "skrejjen",
"surface_forms: [ "skrej", "skre" ],
"phonetic" : "'skrɛjjɛn",
"pattern" : "CCCVCCVC"
}
Je suggérerais probablement aussi de ne pas stocker 1000 formes de mots avec chaque mot, mais inversez cela pour avoir des documents plus petits. Plus vos documents sont petits, moins MongoDB devra lire en mémoire pour chaque recherche (tant que les conditions de recherche ne nécessitent pas une analyse complète bien sûr) :
{
"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"
}
Je doute également que MySQL fonctionne mieux ici avec des recherches de formes de mots aléatoires, car il devra effectuer une analyse complète de la table, tout comme MongoDB le serait. La seule chose qui pourrait aider est un cache de requête - mais c'est quelque chose que vous pouvez intégrer assez facilement dans votre interface utilisateur/API de recherche dans votre application.