ORDINA BLOGT

Elasticsearch

Elasticsearch - Een krachtige open source zoekmachine geïmplementeerd bij een publieke dienstverlener

  • Patrick Jenner
  • 28 oktober 2013

Vorige week heb ik succesvol een project afgesloten waarin ik de open source zoekmachine Elasticsearch implementeerde bij een grote publieke dienstverlener.
Deze zoekmachine begint steeds meer aan populariteit te winnen vandaar dat ik deze implementatie toch even in het voetlicht wil plaatsen.

ElasticSearch is, op de open source zoekengine Lucene gebaseerde, indexeersoftware geschreven in 2010 door Shay Banon in de programmeertaal Java. Uniek aan Elasticsearch is de eenvoud waarmee het cluster van zoeknodes op te schalen is en metadata schema's dynamisch aan te brengen zijn zonder dat hiervoor de index herstart hoeft te worden. Dit maakt het een zeer flexibel product dat vanwege de Apache 2 Licentie ook nog eens een veel lagere TCO heeft dan proprietary oplossingen met vergelijkbare functionaliteit zoals bijvoorbeeld de Google Search Appliance.

Binnen de open source software heeft het alleen concurrentie te duchten van Apache Solr en dan met name versie 4 daarvan, SolrCloud. Beiden hebben Lucene als basis en opereren in een cluster van losse nodes. Het verschil zit hem met name in de door mij al genoemde flexibiliteit: Solr werkt met vaste schema's en dient herstart te worden zodra er iets in wijzigt. Elasticsearch kent geen schema, alleen maar een mapping van gelijkgestemde data. Solr gebruikt Zookeeper, een node die de beheerder is over alle nodes in het cluster en bijhoudt welke nodes niet beschikbaar zijn... totdat de Zookeeper zelf niet beschikbaar is! Bij Elasticsearch kan elke node het beheer over andere nodes doen. Zodra één beheerder uitvalt neemt een andere node het eenvoudig over.

De inzet van Elasticsearch voor de dienstverlener is een wat ongebruikelijke. De zoekmachine is publiekelijk beschikbaar voor elke bezoeker van de website van de dienstverlener en biedt derhalve zoekresultaten over de webpagina's van die website. Ongebruikelijk is echter dat de index niet is gevuld met content dat direct uit het Content Management Systeem wordt verwerkt maar met content die door Apache Nutch, een zogenaamde webcrawler, wordt verzameld aan de buitenkant van de website. Voordeel van deze methode is dat er eenvoudig zoekresultaten van externe websites aangeboden kunnen worden die buiten de invloedsfeer van de dienstverlener liggen; Nadeel is dat de webcrawler html pagina's verzameld die eerst van allerlei opmaak ontdaan moet worden om de daadwerkelijke content te kunnen indexeren.

Het meest lastige aan de implementatie van de zoekmachine was het afstemmen van de analyzers: Content wordt door een analyzer in kleine stukken gehakt (meestal in afzondelijke woorden door een zin op spaties te ontleden) en ontdaan van stopwoorden (nietszeggende woorden als lidwoorden, koppelwoorden en andere kleine woorden die alleen dienen om een zin leesbaar te maken). Vervolgens worden aan de losse woorden synoniemen toegekend zodat wanneer iemand zoekt op 'zoeken' er ook resultaten gevonden worden voor 'speuren', 'zoek' en 'gezocht'. Belangrijk is dan ook nog dat dezelfde analzyer die gebruikt wordt om de content te indexeren ook gebruikt wordt om de zoekopdracht van de eindgebruiker te indexeren.

De dienstverlener is uitermate tevreden met Elasticsearch als zoekmachine en heeft daarmee een eerste maal open source software ingezet dat een bestaand proprietary product vervangt. Omdat zij actief is in de publieke sector heeft zij als doelstelling meer open source te gaan gebruiken en ik zal ze de komende tijd hier actief verder in begeleiden!

Over de auteur:

Patrick Jenner

Patrick Jenner is Open Source Architect. Hij is een ervaren adviseur en evangelist op het gebied van open source software, open standaarden en open data en heeft tevens enkele presentaties op zijn naam staan waarin hij de voordelen van het begrip 'Open' pragmatisch weet uit te leggen.