sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb - Multipeltextindex:Indexnyckelmönster för stort felkod 67

Problemet med din föreslagna struktur:

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

Är det även om du nu kan göra

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

och kör sedan frågor som:

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

detta kommer nu att returnera hela arraydokumentet där arrayelementet matchas.

Du kanske vill överväga att referera så att varje rankningsresultat är ett separat dokument och sökorden och annan metadata refereras, för att undvika att upprepa massor av information.

Så du har ett nyckelord/metadatadokument som:

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

och sedan ett resultatdokument som:

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

där keyword_id länkar tillbaka till (referenser) nyckelordet/metadatatabellen -- uppenbarligen, i praktiken, kommer _id:erna att se ut som "_id" :"519817e508a16b447c00020e", men detta är bara för läsbarheten. Du kan nu indexera på keyword_id, domän och href, antingen tillsammans eller separat, beroende på dina frågetyper och du kommer inte att få index key pattern too large error och du kommer bara att få ett enda matchande dokument i stället för en hel array returnerad.

Jag är inte helt klar över var du behöver fuzzy/regex style sökningar och om du kommer att söka metadata eller bara href och domän, men jag tycker att den här strukturen borde vara ett renare sätt att börja tänka på indexering, utan att maxa på index, som förut. Det låter dig också kombinera fynd på vanliga index med textindex, beroende på ditt frågemönster.

Du kanske hittar det här svaret MongoDB-relationer:inbädda eller referens? användbar när du överväger din dokumentstruktur.



  1. delar db-anslutning över hela appen i mongoose

  2. Mongodb $graphLookup bygghierarki

  3. Villkorlig projektion i mongodb med c#-drivrutin

  4. En guide till MongoDB-distribution och underhåll med Puppet:Del 2