sql >> Databasteknik >  >> NoSQL >> MongoDB

Snabba upp regex-strängsökning i MongoDB

En möjlighet skulle vara att lagra alla varianter som du tror kan vara användbara som ett array-element – ​​dock inte säker på om det kan vara möjligt!

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

Jag skulle nog också föreslå att inte lagra 1000 ordformer med varje ord, utan vända på detta för att få mindre dokument. Ju mindre dina dokument är, desto mindre skulle MongoDB behöva läsa in i minnet för varje sökning (så länge sökvillkoren inte kräver en fullständig skanning förstås):

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

Jag tvivlar också på att MySQL skulle fungera bättre här med sökningar efter slumpmässiga ordformer eftersom det kommer att behöva göra en fullständig tabellskanning precis som MongoDB skulle göra. Det enda som kan hjälpa där är en frågecache - men det är något som du kan bygga i ditt sökgränssnitt/API i din applikation ganska enkelt förstås.



  1. Redis, lyssna på pubsub-evenemang och förvandla dem till en stream för mer tillförlitlig konsumtion

  2. Mongo DB-förfrågan i Java Spring-data Mongo

  3. Hur man använder ActionController::Lev tillsammans med Resque + Redis (för chattapplikation)

  4. WebSocket-anslutning till <URL> misslyckades:Fel under WebSocket-handskakning:Oväntad svarskod:521