Konsten att hitta det du söker efter

I nästintill alla Episerver-projekt som vi på Meridium skapat eller på något sätt arbetat med finns det alltid en fråga som alltid måste besvaras. Vilken sökmotor ska vi använda?

Trots att frågan om sökmotor alltid är en stor och viktig punkt finns det inte så många realistiska alternativ på marknaden. Denna fråga brukar ofta dra ut på tiden då det är svårt att förstå skillnanderna mellan produkterna för någon som inte jobbar med de tekniska bitarna. Dessutom kan det handla om ganska mycket pengar beroende på webbprojektets omfattning.

För några år sedan började jag, som ett hobbyprojekt, att skriva en egen sökmotor. Tanken med sökmotorn var att den skulle vara en hybrid där jag kombinerade de bästa bitarna mellan Siteseeker och Episerver Find. Att bygga en sökmotor själv visade sig vara ett väldigt omfattande projekt för en ensam utvecklare. Men jag lärde mig MASSOR i detta projekt. Jag jobbade med teknologier som att bygga egna LINQ providers, Azure, automatiska byggen, crawling av webbplatser och mycket mycket mer. I slutändan blev projektet för stort att driva till den nivå jag ville bygga detta på.

En annan sak som fick mig att sluta var att jag lärde mig mer och mer av Elasticsearch och insåg att denna sökmotor gjorde allt som jag ville. Jag insåg även att jag aldrig själv kan bygga något som är bättre än Elasticsearch.

If you can't beat them, join them

Elasticsearch är en av de mest populära sökprodukter på marknaden och har gigantiska kunder så som Dell, Blizzard, ebay med flera. Men om Elasticsearch är så himla bra varför används den inte i flera Svenska webbprojekt baserat på Episerver? Faktum är att den används ganska flitigt fast ompaketerad under namnet Episerver Find. Elasticsearch är nämligen en opensource produkt licensierat under Apache License 2 vilket gör det okej att modifiera och distribuera denna under ett nytt namn. Den är dessutom helt gratis att använda.

Men det måste finnas en hake för detta låter ju för bra för att vara sant? Det finns ingen hake men det finns en del försvårande omständigheter. Elasticsearch är en väldigt teknisk produkt och kräver en väldigt stor förståelse för sökmotorer för att kunna utnyttja den på rätt sätt. APIerna är enorma och det är otroligt mycket man kan göra med den. En annan omständighet är att hosting inte är något som ingår, detta får man lösa själv eller köpa tjänsten.

ElasticEpi blir till

Efter att jag lagt ner mitt gigantiska sökprojekt fokuserade jag på det till synes mycket mindre projektet att få Episerver att prata med Elasticsearch. Detta visade sig att inte vara riktigt så lätt som jag ifrån början trodde.

I otekniska termer var detta som att försöka pressa in en rund boll i ett fyrkantigt hål. Men efter nästan ett år av funderade och testande hittade jag en lösning som jag tyckte fungerade. Jag valde att använda mig utav ett av Elasticsearchs officiella APIer för .NET som heter NEST. Där fanns möjligheterna för att bygga de integrationer som jag ville. I dessa intergrationer ingår alla de saker som man förväntar sig så som automatiska uppdateringar av sökmotorn vid förändring av innehåll i Episerver och mycket mycket mer.

Efter att jag var klar med ElasticEpi som mitt hobbyprojekt vore det såklart roligt ifall nån ville använda den. För att kunna fortsätta med utvecklingen valde vi att flytta in ElasticEpi in i Meridium istället. Så istället för att utvecklas av mig på kvällen när mina barn somnat utvecklas och förvaltas nu istället ElasticEpi av ett av Meridiums utvecklingsteam där jag ingår. ElasticEpi är där igenom en produkt som vi säljer till våra kunder.

Episerver Find eller ElasticEpi?

Men vad är då skillnanden mellan ElasticEpi och Episerver Find? Båda bygger på samma produkt och har samma grundförutsättningar. Skillnaden är att Episerver Find har byggt ett eget klientbibliotek över Elasticsearch som döljer mycket av den tekniska komplexiteten för utvecklare så att man inte behöver känna till så mycket om Elasticsearch för att använda produkten. Detta gör inte ElasticEpi.

Frågan är då om detta är bra eller dåligt och detta är såklart helt omöjligt för någon som inte är tekniskt insatt i båda dessa produkter att svara på. Jag kommer försöka så opartiskt jag bara kan förklara nackdelar och fördelar med de båda angreppsätten på Elasticsearch.

  • Episerver Find är en mycket enklare produkt för utvecklare att få ett resultat ur och man kan mycket snabbare se resultat. Men gillar man inte det resultat man får är det svårare och ibland omöjligt att ändra detta, i ElasticEpi styr du allt själv.
  • I Episerver Find ingår hosting i priset. Det gör det inte i ElasticEpi.
  • I ElasticEpi kan du styra mappningen i sökmotorn vilket gör att du kan styra denna till att göra tex realtidssökningar medan användaren skriver. Detta går inte göra på nått bra sätt i Episerver Find.
  • I ElasticEpi kan du göra multipla sökningar inom samma sökfråga men med olika 'kriterier' och inställningar. Det går inte göra i Episerver Find. Detta kan vara svårt att förstå vad detta innebär. Men detta är en av huvudanledningen till att jag byggde ElasticEpi. Detta medför att man kan bygga otroligt kraftfulla sökfrågor som har olika relevans och tar hänsyn till orduppbyggnad, synonymer, närhet till termer relativt till varandra, rättstavningar och mer.
  • ElasticEpi är inte lika hårt knuten till Episerver. Det här medför att det är lättare och få in sökresultat ifrån andra källor än Episerver i sökmotorn. Detta går i Find också men jag upplever det omständigare, men jag kanske inte är helt opartisk.
  • Episerver Find köper du som en tjänst där du betalar per månad. ElasticEpi köper du en gång sen är det fritt att använda denna för alltid.
  • I Episerver Find ingår ett gränsnitt inne i Episerver där man kan peta på diverse iställningar. Detta finns inte i ElasticEpi då vi inte har nått 'standardsätt' att söka på utan bygger allt exakt så som vi vill utifrån projektets förutsättningar och krav. Vill man kunna göra inställningar som redaktör i Episerver måste detta byggas specifikt för webbplatsen.
  • ElasticEpi har stöd för facetter/kategorisering i trädliknande form. Dessa är något många e-handelssiter använder där man kanske väljer en skärm för att sedan i en sub kategori väljer upplösning.

När ska man välja vad?

För att sammanfatta detta skulle jag säga att tror du att du kommer vara nöjd med det sökresultat som Episerver Find producerar och inte kommer vilja peta på detaljerna så är antagligen Episerver Find rätt. Vill du ha en lätt sökmotor utan att behöva tänka på hosting är antagligen Episerver Find rätt.

Är sökmotorn en av de viktigaste verktygen på din webbplats? Tänker du använda sökmotorn till mer än bara söksidan? Vill du söka i realtid istället för att bara få sökordsförslag? Vill du ha en sökmotor som fungerar utanför Episerver? Vill du ha kontroll på din sökmotor? Då är antagligen ElasticEpi något för dig.