Examine – Umbracon hakumoottori

03.09.2025

Sisällönhaku on tärkeä osa modernia web-ympäristöä sekä CMS-alustoja. Sen vuoksi Umbracossa on sisäänrakennettuna laaja ja erittäin muokattava hakumoottori. Hakuominaisuuksien keskellä on kaksi teknologiaa - Examine ja Lucene.NET. Tässä blogikirjoituksessa käydään läpi, miten nämä komponentit luovat suuremman hakukokonaisuuden – ilman tarvetta kolmannen osapuolen paketteille! Kirjoitus sai inspiraationsa Codegardenissa kuullusta Callum Whyten luennosta "Advanced Search 101".

 

Mikä on Examine?

Examine on hakua varten luotu abstraktio, joka tekee hakujen luomisesta helpompaa. Sen lisäksi yhteinen abstraktio tekee matalamman tason indeksoinnista ja hakutyökalujen vaihdosta huomattavasti mutkattomampaa. Näistä hakukonekirjastoista Umbraco käyttää vakiona Lucene.NET:iä.

Examinen tehtävä on luoda alemman tason hakukoneille yhteiset rajapinnat, joita kehittäjät voivat käyttää indeksointiin ja haettavan sisällön hallinnointiin. Sen voi siis ajatella avustavana interfacena, jonka kaikkien hakumoottorikirjastojen on noudatettava. Sen avulla kutsut metodeihin kuten ”Search” pysyy samana, vaikka taustalla toimiva kirjasto olisikin vaihtunut Lucenesta esimerkiksi ulkoiseen ElasticSearchiin. (Examine Documentation | Examine)

 

Mikä on Lucene.NET?

Lucene.NET on tehokas tekstipohjainen hakumoottorikirjasto, joka perustuu Java-pohjaiseen Apachen Lucene-kirjastoon (Apache Lucene | Welcome to Apache Lucene). Se tarjoaa voimakkaita hakuominaisuuksia kuten monimutkaisia kyselyitä, merkityspisteytyksen sekä täystekstin analyysiä. Kaikki Lucenen ominaisuudet eivät kuitenkaan ole käytettävissä Examinen kautta. (Lucene.NET documentation).

 

Umbracon valmiit indeksit

Umbracon mukana tulee valmiiksi kolme konfiguroitua Examine Indexiä, joilla haettavaa sisältöä voidaan kategorisoida. Nämä indeksit ovat:

  • ExternalIndex: Indeksoi vain julkisesti saatavilla olevaa sisältöä. Useimmiten käytössä frontendin hakuominaisuuksissa
  • InternalIndex: Indeksoi kaiken sisällön, myös ne, jotka eivät ole julkisia. Käytössä useimmiten backofficen hakuominaisuuksissa
  • MembersIndex: Indeksoi sivuston käyttäjätietoja. Käytössä muun muassa rekisteröityjen käyttäjien hauissa

Valitsemalla oikean indeksin käyttötarkoitukseen voidaan vaikuttaa paljon sisältöön sekä haun tehokkuuteen. On myös hyvä pitää mielessä, että näitä indeksejä voidaan laajentaa sekä luoda täysin uusia omien tarpeiden mukaisesti. (Examine settings | Umbraco Docs)

 

Miten haku toimii Umbracossa?

Kun sisältöä julkaistaan Umbracossa, se menee Examinen prosessoitavaksi. Jokainen kenttä on jaettu omiin termeihin, jotka tallennetaan indekseihin. Tämän avulla hakutilanteessa Examinen käyttämä hakukone voi parsia sille annetun kyselyn ja hakea dokumentteja jopa niiden sisällön perusteella.

Tämä haku tapahtuu koodissa käyttämällä Fluent API:n syntaksia. Examine tukee tätä valmiiksi, joka tekee monimutkaisten hakujen teosta huomattavasti helpompaa ja virhemarginaalista pienemmän. Alla olevassa esimerkissä näkyy esimerkki yksinkertaisesta Fluent API -kyselystä.

 

_examineManager.TryGetIndex(Constants.UmbracoIndexes.ExternalIndexName, out IIndex? index);

var searchResults = index?.Searcher.CreateQuery("content")
    .Field("nodeName","hello")
    .Or()
    .Field("metaTitle","hello")
    .Execute();

 

Tässä esimerkissä Examinen luoma kysely annetaan Lucenelle muodossa +nodeName:hello metaTitle:hello. Voidaan siis huomata, että kyselyn luomisesta saadaan turvallisempi käyttämällä tyypitettyä Fluent API:a, omien hakutekstien sijaan. Vaihtaessa Lucenesta ElasticSearchiin koodia ei tarvitse muuttaa. (Examining Examine | Umbraco)

 

Haun jatkokehitys

Kuten aiemmin mainittiin, Examine tarjoaa todella paljon ominaisuuksia hakemista varten, mitä tässä blogikirjoituksessa ei käyty läpi. Esimerkkinä tähän on omien indeksien luominen, mihin löytyy valmis opas Umbracon dokumentaatiosta (Custom indexing | Umbraco Docs). Käy myös katsomassa ExamineX projektia, joka mahdollistaa ulkoisten hakukoneiden ja indeksien käytön Azuren Searchin avulla (Azure Search for Umbraco | ExamineX).

 

Ota meihin yhteyttä, niin muutetaan ideasi ratkaisuiksi!