MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Beschleunigen Sie die Suche nach Regex-Strings in MongoDB

Eine Möglichkeit wäre, alle Varianten, von denen Sie denken, dass sie nützlich sein könnten, als Array-Element zu speichern – bin mir aber nicht sicher, ob das möglich ist!

    {
        "number" : "pl",
        "surface_form" : "skrejjen",
        "surface_forms: [ "skrej", "skre" ],
        "phonetic" : "'skrɛjjɛn",
        "pattern" : "CCCVCCVC"
    }

Ich würde wahrscheinlich auch vorschlagen, nicht 1000 Wortformen mit jedem Wort zu speichern, sondern dies umzudrehen, um kleinere Dokumente zu haben. Je kleiner Ihre Dokumente sind, desto weniger müsste MongoDB für jede Suche in den Speicher einlesen (sofern die Suchbedingungen natürlich keinen vollständigen Scan erfordern):

{
    "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"
}

Ich bezweifle auch, dass MySQL hier bei der Suche nach zufälligen Wortformen besser abschneidet, da es einen vollständigen Tabellenscan durchführen muss, genau wie MongoDB es tun würde. Das einzige, was dort helfen könnte, wäre ein Abfrage-Cache - aber das könnten Sie natürlich ganz einfach in Ihre Such-UI/API in Ihrer Anwendung einbauen.