sql >> Database >  >> NoSQL >> MongoDB

Mongodb - Index met meerdere tekst:patroon van indexsleutels te groot foutcode 67

Het probleem met uw voorgestelde structuur:

{
 keyword" : "Just an example query", 
 "rankings" :
    [{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
     ...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
 ]}
}

Is dat, hoewel je dat nu kunt doen

db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"}) 

en voer vervolgens zoekopdrachten uit zoals:

db.ranking.find({$text:{$search:"example1"}});

dit zal nu het hele array-document retourneren waar het array-element overeenkomt.

U kunt overwegen te verwijzen, zodat elk rangschikkingsresultaat een afzonderlijk document is en naar de trefwoorden en andere metagegevens wordt verwezen, om te voorkomen dat u veel informatie moet herhalen.

U heeft dus een document met trefwoorden/metagegevens zoals:

{_id:1, "keyword":"example query", "querydate": date, "other stuff":"other meta data"},
{_id:2, "keyword":"example query 2", "querydate": date, "other stuff":"other meta data 2"}

en dan een resultatendocument zoals:

{keyword_id:1, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
... keyword_id:1, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"},
 keyword_id:2, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
 ...keyword_id:2, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"}}

waar keyword_id teruglinkt naar (referenties) de trefwoord/metadatatabel -- uiteraard zullen de _ids er in de praktijk uitzien als "_id" :"519817e508a16b447c00020e", maar dit is alleen voor de leesbaarheid. U kunt nu indexeren op keyword_id, domain en href, samen of afzonderlijk, afhankelijk van uw zoektypes en u krijgt niet de fout index key pattern too large error en u krijgt slechts één overeenkomend document terug in plaats van een hele array.

Ik ben niet helemaal duidelijk over waar je fuzzy / regex-achtige zoekopdrachten nodig hebt en of je metadata zoekt of alleen href en domein, maar ik denk dat deze structuur een schonere manier zou moeten zijn om na te denken over indexering, zonder het maximale uit indexen te halen, zoals eerder. Het stelt je ook in staat om vondsten op normale indexen te combineren met tekstindexen, afhankelijk van je zoekpatroon.

Mogelijk vindt u dit antwoord MongoDB-relaties:insluiten of verwijzen? handig bij het overwegen van uw documentstructuur.



  1. Inleiding tot gegevenslocatie in Hadoop MapReduce

  2. Controleer of MongoDB upsert een invoeging of een update heeft uitgevoerd

  3. NoClassDefFoundError => ClassPath$JavaContext bij gebruik van play start

  4. Twee collecties samenvoegen in MongoDB