Sogyo Search

 
08 december 2010

Al weer een paar weken geleden is er een project gestart binnen Sogyo om een oplossing te vinden voor een belangrijke vraag over vragen. Deze vraag was: “Waarom kunnen we de nodige informatie, om veelgestelde vragen binnen Sogyo te beantwoorden, niet makkelijk op zoeken? “. Dit is wel heel vaag en algemeen gesteld, maar bijvoorbeeld als jij op zoek bent naar een Sogyo medewerker met kennis van Ruby: hoe vind je die? Je kan die persoon misschien vinden via intranet of je vraagt het aan een collega. Geen probleem, om je heen vragen, want dat versterkt de social cohesie weer. Maar het kost wel wat tijd en daar zit niet iedereen op te wachten.

Een zoekmachine die de verschillende bronnen binnen Sogyo doorzoekbaar gaat maken zou een oplossing kunnen zijn voor de bovenstaande vraag. Daarom is er een groepje van Sogyo’ers gevraagd om een zoekmachine te maken die alle beschikbare documenten binnen Sogyo voor eens en altijd vindbaar maakt voor elke medewerker. Dit klinkt nogal episch en optimistisch maar dat is ook wel nodig binnen zo’n project. Het ontbrak zeker niet aan realisme binnen de groep van gekozen software ontwikkelaars: dit wordt gewoon een omvangrijk project waar we veel van kunnen leren. We hebben natuurlijk een goed voorbeeld: Google. Die presenteert vaak de nuttige zoekresultaten in de eerste of tweede pagina van duizenden gevonden resultaten.

De belangrijkste vereisten binnen het project waren: Scrum ontwikkelmethode, de Lucene library gebruiken en een werkend systeem afleveren na de eerste paar weken. Daarnaast moet er elke sprint (2 weken) een werkende applicatie gepressenteerd worden. Voor de applicatie is gekozen om in Java te programmeren vanuit de pragmitische standpunt dat we allemaal daar ervaring mee hadden. Daarnaast is de Lucene library van origine in Java geschreven.

Lucene is een zoekmachine library geschreven door de makers van Apache. Deze library wordt bijvoorbeeld gebruikt in de Eclipse IDE om documenten te doorzoeken. Wolfram en Wikipedia gebruiken ook Lucene. Dat de mensen van Apache puike software maken werd steeds duidelijker tijdens de eerste weken van het project. Een zoekbare index maak je best snel, hieronder staat voorbeeld code.

// imports en package weg gelaten…
// lucene-core-3.0.2.jar en lucene-analyzers-3.0.2.jar libraries gebruikt

public class LuceneExample {

private static final Directory index = new RAMDirectory();
private static final Analyzer ANALYZER = new SimpleAnalyzer();

public static void main(String[] args) throws LockObtainFailedException, IOException {

IndexWriter writer = new IndexWriter(index, ANALYZER, IndexWriter.MaxFieldLength.UNLIMITED);

writer.addDocument(createDoc(“Lucene in action”, “Search Machine”));

writer.addDocument(createDoc(“Tika in action”, “Parsers”));writer.close();for (int i = 0; i < 2; i++) {
System.out.println(IndexReader.open(index).document(i).get(“Title”));
}
}

private static Document createDoc(String title, String category) {

Document doc = new Document();
doc.add(new Field(“Title”, title, Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field(“Category”, category, Field.Store.YES, Field.Index.ANALYZED));
return doc;
}
}

Al snel hadden we een zoekpagina en een Lucene index werkend voor een eerste zoekactie. Het geheel draaide op een JBOSS server en de internet pagina’s zijn JSP’s. Het geheel is ook RESTful opgezet en we gebruiken Maven (ja alweer van Apache) om alles snel te kunnen deployen zodat we de libraries in de jars gemakkelijk te kunnen delen tussen de verschillende projecten. Met POM (Project Object Model) XML bestanden worden de verschillende libraries en classes aangegeven die in de uiteindelijke WAR (Web Application Archive) of EAR ( Enterprise Archive) file van belang zijn.
Zelf ben ik nieuw met Maven en JBOSS dus ik was niet helemaal zeker of dit juiste keuzes waren. Achteraf gezien is Maven een essentiële tool bij het deployen en managen van libraries.

De nieuwste functies die geïmplementeerd zijn: indexering van profielpagina’s en de metadata van elk document in de SVN repositories, fileshares en Google docs. Meer posts volgen over specifieke onderdelen van de zoekmachine.

De zoekmachine is bereikbaar intern (http://search:8080/sogyosearch-gui/ ) en extern (https://search.sogyo.nl/sogyosearch-gui/ ).

De zoekmachine is bereikbaar intern (http://search:8080/sogyosearch-gui/ ) en extern (https://search.sogyo.nl/sogyosearch-gui/ ).


Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Development, Java (EE)

Tags: , , ,


Reactie

  • Matthijs schreef:

    Ik vind dit een mooie tool en ik ga hem zeker gebruiken! Het valt wel direct op hoe het gesteld is met de profielen. Mijn profiel staat er bijvoorbeeld (nog steeds) dubbel in.
    Bericht aan Simon:
    Shih-Hisao Hu
    Simon is een sociale en leergierige software ontwikkelaar ……
    Deze tool zou zich ook nog wel eens nuttig kunnen maken om statistieken over van alles en nog wat binnen Sogyo te verzamelen

    Geplaatst op 08 december 2010 om 13:41 Permalink