Introduktion till MarkLogic – Ett första projekt, del 1

Share on FacebookShare on Google+Email this to someoneTweet about this on TwitterShare on LinkedIn

Uppdatering 2015-02-09: I dagarna så släpptes MarkLogic version 8, vilket är en fantastisk release med många nya spännande funktioner som jag kommer att gå in på senare, och som en del av den å har vissa av verktygen gömts som jag använder i nedan post. Man har gjort det för att så småningom fasa ut dem, det finns olika anledningar till detta. Dock så finns de där och fungerar enligt mina instruktioner nedan, för att komma åt Information Studio behöver man nu gå till http://localhost:8000/appservices först.

Häromdagen så höll jag en presentation med demo på Stockholm NoSQL Meetup som jag tror skulle vara intressant att använda som ett introduktionsprojekt för MarkLogic.

Jag kommer att dela upp det i ett antal inlägg så att de inte blir för långa, varav detta är det första där vi kommer att skapa en databas, ladda samt uppdatera data.

Datat som vi kommer att använda är publikt tillgängligt data, så kallat Öppet Data, från http://www.nobelprize.org/nobel_organizations/nobelmedia/nobelprize_org/developer/ . Det innehåller information om alla Nobelpristagare, dock så har jag valt att konvertera det till XML då det ökar flexibiliteten för hur vi kan ladda det. Jag har också skapat XML filer som innehåller koordinater som vi kommer att uppdatera våra Nobelpristagare med.

All data och övriga filer, med exempelkod, kan du ladda hem från GitHub , enklast är att klicka på Download ZIP, i nedre högra hörnet, för att få en zipfil med alla filer. Packa upp den på ett lämpligt ställe på den maskin som du kommer att installera MarkLogic på.

Du behöver också hämta MarkLogic programvara, utvecklingslicensen är kostnadsfri, och det gör du på http://developer.marklogic.com/products

Installationen av MarkLogic är enkel och består av en fil. Dokumentation runt vad som behövs göras innan osv kan du hitta på http://docs.marklogic.com/guide/installation. Det finns också en video, som går igenom alla installations steg här http://youtu.be/fyHXhCMF_Uo, den är bara åtta minuter så du hinner allt se den (längre tid än så behövs inte för att installera).

Så nu har du en fungerande installation av MarkLogic med ett admin konto upplagt.

Det första vi behöver göra är att skapa en databas som vi skall använda. Nu finns det olika sätta att göra detta i MarkLogic så som via administrationsgränssnittet, via script, i XQuery, eller via REST. För detta fall så kommer vi göra detta via något som heter Application Services vilket består av olika self-service, har tyvärr inget bra svenskt ord, verktyg . Vi kommer åt detta genom att i en webbläsare gå till http://localhost:8000 (nu kommer jag att använda localhost i alla exempel men i fall du inte har installerat MarkLogic lokalt på din dator så behöver du byta ut det mot den ip-adress/namn som datorn med installationen har).

Startsida

 

För att skapa en databas så klickar vi först på länken Information Studio och sedan på knappen + New Database, ge den ett namn, i detta fall så kommer jag använda nobelprize som namn, och klicka sedan på Create Database.

Ny databas

 

Vi har nu skapat en databas med standard inställningar. Vill du se alla inställningsmöjligheter så görs det enklast i administrationsgränsnittet som du kommer åt via Admin länken högst upp till höger. Men för detta steg så nöjer vi oss med standardinställningarna.

Nästa steg är att börja ladda vårt databas.

På samma sätt som när det gäller att skapa databaser så har vi flera möjligheter att ladda data. Men för detta exempel så kommer vi använda ett webbaserat verktyg som heter Information Builder. Det kommer vi åt genom att klicka på + New Flow längst ner på sidan.

Ladda data

 

Om vi klickar på edit brevid Untitled så kan vi sätta ett namn på detta flöde, jag har valt att kalla det LoadNobelPrize, och klickar sedan på Done.

Det första, efter namnsättning så klart, vi behöver göra är att bestämma hur datat skall hämtas, detta styrs i Collect. Förvalt är Filesystem Directory som hämtar alla filer i en specifik katalog, denna måste finnas på samma dator som MarkLogic är installerat på. Om vi klickar på Change Collector så ser vi vilka val som finns standard.

Data collectors

 

Vi skall använda Filesystem Directory, vilket är redan valt, så vi kan klicka på Cancel. Dock så behöver vi ställa in vilken katalog som den skall läsa och det gör vi genom att klicka på Configure… och sedan skriva in hela sökvägen till katalogen np som ligger under data samt klicka på Done.

Directory loader inställningar

Sedan behöver vi ställa in hur våra dokument (XML filer) skall läsas in vilket görs genom att klicka på Ingestion…

Här kan vi ändra olika inställningar som påverkar inläsningen, så som att reparera felaktiga XML filer,  men för detta fall så lägger vi bara till ett värde i namespace, http://marklogic.com/swe/nobel-prize, och klickar på Done. Namespace kan användas för att hålla isär i de fallen vi har samma fältnamn som förekommer i olika typer av data.

Ingestion Inställningar

 

Om vi behöver bearbeta indatat under laddning så kan vi använda oss av Transform men i detta fall är det inte nödvändigt, utan de uppdateringar vi skall göra gör vi manuellt i ett senare steg.

Sista steg innan vi kan börja ladda är att tala om hur det skall hanteras i databasen, vilket görs genom att klicka på Document settings knappen.

Det första är att sätta URI parametern till /nobelprize/{$filename}{$dot-ext}. URI är det unika id’t på dokumentet i MarkLogic (man kan förenklat säga att ett dokument motsvarar en rad i en databas, dock med skillnaden att varje rad kan ha olika antal kolumner). Sedan skall vi också sätta en Collection genom att klicka på Collections tabben.

Document inställningar, URI

Man kan se Collection som taggar på våra dokument och är ett sätt att gruppera dessa. Ett dokument kan tillhöra flera Collection. Vi skall i detta fall tagga vårt data med nobelprize. Så vi klickar på + New Collection, skriv nobelprize i Collection samt klickar på Done.

Document settings collections

 

Nu är vi redo att ladda vårt data och detta görs genom att klicka på Start Loading. Man kan se status för laddningen och när det är färdigt har vi nedan bild, om vi vill ta bort det vi laddat så kan vi göra det genom att klicka på Unload.

Laddstatus

Vi har nu 888 dokument, nobelpristagare, laddade i vår databas. Givetvis är vi nu nyfikna och vill snabbt verifiera innehållet. Enklast görs det via Query Console, som du kommer åt genom att klicka på länken högst upp på sidan. Välj sedan nobelprize i Content Source och klickar på Explore knappen för att se våra dokument.

 

 

Utforska dokument

 

Klickar vi på det första dokumentet, i resultatfönstret, så kan vi se innehållet i det.

Dokument innehåll

 

Innan vi börjar söka och analysera våra dokument så behöver vi ladda ytterligare data , nämligen våra geokoder som vi ska uppdatera våra Nobelpristagare med.

Nu kommer det första testet!

Jag kommer inte skriva något steg för steg utan vi kommer i stort sett skapa ett likadant flöde som vi gjorde för Nobelpristagarna, dock med följande skillnader.

  • Filerna vi skall ladda ligger i geocode foldern så vi behöver peka på den i konfigureringen för Filesystem Directory.
  • Vi sätter inget Namespace, så ingen ändring i Ingestion
  • URI sätter vi till /geocode/{$filename}{$dot-ext} samt Collection till geocodes i Document Settings.

När detta är gjort är det bara att klicka på Start Loading men verifiera först att Destination Database är lika med nobelprize.

Om allt har gått bra så skall det nu ha laddats ytterligare 311 dokument till vår databas och du kan verifiera genom att gå till Query Console, välja nobelprize i Content Source och sedan klickar på Explore.

Utforska data med geocodes

 

Vi kommer nu att fortsätta i Query Console och det första vi skall göra är att uppdatera våra Nobelpristagare med geokoder i de fall vi har en.

Språket vi använder heter XQuery och är en W3C standard för att arbeta med XML data, vill du lära dig mer om det så finns det utmärkta självstudier på http://www.w3schools.com/xquery/.

Det vi skall göra är att för varje Nobelpristagare hämta de geokoder som motsvarar kombinationen av fälten name, som är den organisation/institution/företag/etc som pristagaren tillhörde, city, stad där den ligger, och country, som är landet. Vi lägger in geokoderna som nya fält.

Nedan kod  gör detta och efter du skrivit/kopierat in den klickar du på Run (pilen brevid), glöm inte att verifiera att nobelprize är vald i Content Source.

xquery version ”1.0-ml”;

declare namespace np = ”http://marklogic.com/swe/nobel-prize”;

for $laureate in /np:laureate,
    $geocode in /geocode
   where fn:concat($laureate/np:name, ” ”, $laureate/np:city, ” ” , $laureate/np:country) = $geocode/nameaddress/string()
 return xdmp:node-insert-child(fn:doc(fn:concat(”/nobelprize/”, $laureate/np:id ,”.xml”))/np:laureate, (<location>{$geocode/latitude}{$geocode/longitude}</location>))

Om du inte vill skriva av/kopiera koden härifrån så kan du importera den in i Query Console genom att klicka på nerpilen vid Workspace i högra hörnet och välja Import Workspace. Klicka på Choose File och välj filen Admin.xml som finns i foldern QueryConsole under foldern Scripts. Klicka sedan på Import. Ladda geocodes exemplet finns i första fliken, se bara till att att nobelprize är vald i Content Source innan du exekverar skriptet.

När det är färdigt så kommer det bara stå your query returned an empty sequence i resultat delen. Vi kan verifiera att uppdatering gjordes genom att klicka på Explore knappen bredvid Content Source, skrolla ner i resultat listan och klicka på ett nobelprize/ dokument, tex /nobelprize/11.xml.

Vi kan se nu att längst ner finns det tre nya fält location, latitude och longitude. Om du inte ser det så kan det bero på att vi inte hade geokoder för den specifika platsen som Nobelpristagaren finns på.

Updaterat dokument med geokoder

 

Som ett sista steg så kan vi välja att ta bort geokoddokumenten eftersom vi inte kommer att behöva dessa mer. Enklast gör vid det med ett XQuery kommando, om du har importerat koden så är det fliken Delete data.

xquery version ”1.0-ml”;
xdmp:collection-delete(”geocodes”)

 

När vi exekverar koden så kommer den ta bort alla dokument som är taggad, collection, med geocodes. Ganska simpelt.

Vi har nu skapat en databas, laddad samt uppdaterat data. I nästa inlägg kommer jag beskriva hur vi nu kan börja söka i informationen också.

Men kan du inte vänta utan vill börja utforska vad du kan göra med MakrLogic så finns det utmärkta självstudier/exempel på http://developer.marklogic.com/learn

/Mats Stellwall

 

Share on FacebookShare on Google+Email this to someoneTweet about this on TwitterShare on LinkedIn

En reaktion på ”Introduktion till MarkLogic – Ett första projekt, del 1

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *