Hoofdcategorieën
Device Settings

FAQ: Omega search manual

Omega search manual

Auteur: Arjen van der Meijden, acm at tweakers.net, laatste wijziging: 28-11-2003

Doel van de manual

In deze manual wordt geprobeerd de werking en het toepassen van de omega-searchengine uit te leggen. De omega-searchengine heeft een aantal features (zoals stemming) die de zoekmogelijkheden sterk uitbreiden, maar die onbekend en daardoor ongebruikt lijken te zijn bij de meeste gebruikers. Met deze manual wordt geprobeerd daar verandering in te brengen. Meer technische informatie over omega en de achterliggende xapian-engine kan gevonden worden op de xapian website.

Deze manual bestaat uit twee delen, het gebruik en de interne werking. Het eerste hoofdstuk legt kort en bondig uit wat er tot je beschikking staat, het tweede hoofdstuk legt uit hoe de data opgeslagen wordt en waarom bijvoorbeeld stukken van de woorden afgeknipt worden (het zgn. stemming)

Gebruik

Voor het efficiënt en effectief doorzoeken van de zoekdatabase biedt omega een aantal geavanceerde features.

De eenvoudigste zijn het kunnen zoeken op alle opgegeven woorden of slechts een deel ervan. Dit wordt opgegeven door de "default operator" te specificeren (AND voor verplicht alle woorden en OR voor alle of enkele woorden).

Naast de standaard basisoperators kun je ook gebruik maken van boolean operators, phrase/near searches, het groeperen van stukken query en het specificeren van velden. De eerste term slaat op het opgeven van logische operators (and/or/+/-/not), de tweede slaat op het opgeven van (stukjes) zinnen en de laatste kun je gebruiken om aan te geven in welk deel van het document de zoekterm voor moet komen.

Boolean operators

Omega ondersteunt de volgende boolean operators:

AND
De logische 'en' operator, "intel AND pentium" (zowel intel als pentium moeten in de documenten voorkomen).
OR
De logische 'of' operator, "intel OR amd" (intel of amd moet in het document voorkomen, ze mogen ook beide voorkomen).
XOR
De logische 'exclusieve of' operator, woorden mogen niet allebei voorkomen in een document. "intel XOR amd" (intel óf amd mag voorkomen, niet beide)
NOT
De operator om woorden uit te sluiten, "intel NOT pentium" (zoek op intel waarbij geen pentium voorkomt).
+
De verplichtings operator, deze is vergelijkbaar met de AND, maar reageert verschillend op de basis operator "OR". Zie bijvoorbeeld: "intel +pentium". Bij de basis operator OR betekent het: intel mag en pentium moet voorkomen, zie ANDMAYBE. Bij de basis operator AND heeft de + in de meeste gevallen geen invloed op de query en kan over het algemeen weggelaten worden.
-
De uitsluitings operator, deze is vergelijkbaar met de NOT operator, "intel -pentium" (intel, maar geen pentium in de resultaten).
ANDMAYBE
Dit is een impliciete operator en kan je niet zelf gebruiken, deze wordt door omega gebruikt als je als basis operator de "OR" hebt en een query als "intel +pentium" doet, dan moet pentium in het document voorkomen en mag intel er in zitten. Hier verschilt de + operator van AND, aangezien AND alsnog zowel de term ervoor als erna zou verplichten.

Phrase searches

Voor het kunnen opzoeken van specifieke termen, die perse in de gegeven volgorde bij elkaar moeten staan, kent omega de phrase search. Voor het opzoeken van tekst die "bij elkaar in de buurt" moet staan is er de near-operator. Omega herkent verschillende leestekens als samentreksels van phrases in de queries en negeert de leestekens ('vervangt' ze door spaties) tijdens het indexeren, te weten de " ", "-", ".", "_", "/", "\", "@", "'", "*". Zoals je vast al zag vallen de meeste tekens die een website of emailadres samenstellen er onder. Dit is geen toeval, omega zal een phrase search moeten doen als het een website die in de database staat opgeslagen wil achterhalen, aangezien het de leestekens bij het indexeren al negeerde. Op deze manier kan het de websites en dergelijke toch vinden, bij het zoeken kan je simpelweg een website of emailadres intikken voor de gewenste zoekopdracht. Er zijn overigens speciale woorden zoals C++, AT&T die ondanks dat ze leestekens bevatten toch geïndexeerd worden.

Normaal geef je een phrase search op door simpelweg de woorden tussen aanhalingstekens (") te plaatsen, "omega zoekmachine" zoekt naar de woorden omega en zoekmachine naast elkaar.

De andere operator die je kunt gebruiken om de plaats van de woorden te specificeren is de NEAR-operator. Hiermee kun je aangeven dat twee woorden niet meer dan tien woordposities uit elkaar mogen liggen. Een zoekterm als "operator NEAR woorden" zou de voorgaande zin kunnen vinden. Als er meerdere woorden gebruikt worden, moeten deze samen binnen het bereik vallen. Als je bijvoorbeeld zou zoeken op "intel NEAR pentium NEAR processor", moeten de drie woorden samen binnen een groep van elf woorden vallen.

Het belangrijkste nadeel van phrase en near searches is dat ze erg langzaam zijn, vergeleken met gewone searches

Groepering

Voor de ingewikkeldere queries is het handig dat je stukken query kan groeperen met haakjes. Het is een stuk eenvoudiger hier voorbeelden voor te geven dan dit helemaal uit te leggen dus bij deze: "(amd OR intel) AND processor" zoekt naar een amd of intel processor, 'intel AND ("pentium 3" OR "pentium 4" OR "pentium IV")' zoekt naar een intel pentium 3 of pentium 4 (in twee varianten). En zo zijn er vele complexe queries meer te bedenken waarmee je uitgebreide filtering op de zoekresultaten kan uitvoeren.

Velden specificeren

Ook is het mogelijk veldspecificatie te gebruiken. Dit is echter een erg nieuwe feature voor Omega, en zit pas in de laatste versie ingebouwd.

Je kan opgeven dat een woord alleen in de titel, topicstart en replies voor mag komen. Hiervoor kun je respectievelijk de volgende namen gebruiken; title voor de topictitel, topicstart en start voor de topicstartmessage.

Dit doe je door eerst het soort gegeven op te geven, dan een dubbele punt, en tot slot het woord wat je in dat deel wilt vinden. Bijvoorbeeld: "title:(php AND mysql) AND start:(mysql_num_rows OR count)".

Interne werking

Om het zoeken zo goed mogelijk toe te kunnen passen, is minimale basiskennis van de interne werking van de zoekmachine echter wel vereist. Als je echter alleen geïnteresseerd bent in hoe het je het moet gebruiken, dan kan je hier stoppen met lezen.

Opslag

Opslag algemeen

Een zoekmachine beschouwt meestal de opgeslagen data als een heleboel losse documenten, waarbij een document simpelweg een rij termen (woorden) is, niks meer niks minder. De meest eenvoudige manier om een document op te slaan (indexeren), is het bijhouden welke termen in welk document voorkomt en verder niets. Geavanceerdere zoekmachines slaan ook de volgorde van de woorden op en hoe vaak ze in een document voorkomen. Het eerste is om zinnen of andere reeksen van woorden te kunnen vinden en het tweede is handig voor het sorteren van de resultaten.

Een simpel voorbeeld van een set documenten is:

  1. In deze manual wordt geprobeerd de werking en het toepassen van de omega-searchengine uit te leggen.
  2. De omega-searchengine heeft een aantal features (zoals stemming) die de zoekmogelijkheden sterk uitbreiden.
  3. Met deze manual wordt geprobeerd daar verandering in te brengen.

Er zijn natuurlijk een paar woorden welke totaal niet interessant zijn, zoals 'de', 'het', 'en', 'is', etc. Deze worden stopwoorden genoemd en die worden vaak door zoekmachines genegeerd. De losse termen zijn dan bijvoorbeeld: "manual, geprobeerd, werking, toepassen, omega, searchengine, leggen, aantal, features, stemming, zoekmogelijkheden, sterk, uitbreiden, verandering, brengen". De leestekens en stopwoorden worden dus uiteindelijk niet meegenomen.Ook emailadressen en websites worden dus in principe niet als heel woord opgeslagen, maar als losse woorden: "www.tweakers.net" wordt dus "www", "tweakers", en "net". Als we van bovenstaande voorbeelden een simpele matrix maken, krijg je het volgende:

Document#manualwerkingfeaturesomega
1XX-X
2--XX
3X---

Als je nu als zoekopdracht omega manual in zou voeren, krijg je document 1,2 en 3 terug, waarbij 1 hoger wordt gewaardeerd dan 2 en 3 omdat hier beide woorden in voorkomen.

Opslag bij omega

Omega slaat het allemaal wat ingewikkelder op. Per document wordt bijvoorbeeld opgeslagen hoe vaak een woord voorkomt, en waar het staat. Dit om de sortering te verbeteren en hierdoor kan er ook gezocht worden op zinnen.

In omega is ervoor gekozen om complete topics als losse documenten te beschouwen, omdat dit de kleinst mogelijke zinvolle verzameling informatie is voor het doel van deze searchengine. Losse reacties hebben vaak net niet genoeg betekenis en inhoud. Gevolg is dat de resultaten bij zoeken beperkt worden tot hele topics.

Naast de termen in de topics, hun frequentie en hun locatie, wordt er bijgehouden wie er gereageerd heeft (om te kunnen zoeken naar een specifieke reactie van iemand), wie het topic startte, in welk forum het topic staat, wat de titel is, op welk tijdstip het topic geplaatst is en of het open, sticky of gesloten is. Al met al levert dit bij GoT ruim tien gigabyte aan data op. Dit is overigens een database die helemaal los staat van de MySQL-database die gebruikt wordt voor het alledaagse forumgebruik.

Om resultaten beter te kunnen ordenen en de zoekopdracht eventueel beter te specificeren worden de verschillende stukken data van een document (de topictitel, de topicstart en de replies) apart opgeslagen in drie verschillende velden. Hierdoor kan er zonder veel moeite een term een hogere waardering krijgen, als deze bijvoorbeeld voorkomt in de titel. Bij GoT heeft de titel een drie keer zo hoge waarde en de topicstart een twee keer zo hoge waarde als de "gewone" replies. Mocht een gezochte term dus in de titel staan van een document, dan zal dit door omega als relevanter beschouwd worden dan een document waar het alleen maar in een reply staat.

Stemming

Een probleem is dat sommige woorden bijna hetzelfde betekenen zonder dat ze precies hetzelfde zijn. Voorbeelden zijn woorden als "verbeteren, verbetering, verbeteraar, verbeterde". Als deze afgeknipt worden tot "verbeter" dan betekenen ze nog steeds hetzelfde, maar de woorden zijn wel omgezet in dezelfde zoekterm. Dit proces heet stemming (woordstam bepalen) en zorgt, naast een verkleinde zoekdatabase, vooral voor een beter resultaat, wanneer er documenten gevonden moeten worden die niet exact dezelfde woorden bevatten, maar wel over hetzelfde onderwerp gaan. Deze techniek is uiteraard helaas niet compleet vrij van foutjes. "boom" en "bomen" worden afgeknipt tot "bom" en dat betekent uiteraard iets heel anders. Toch wegen in de praktijk de voordelen wel op tegen de nadelen.

Queries

Voor het doorzoeken van de database moet er op een of andere manier duidelijk worden gemaakt wat de gebruiker zoekt. Een van de meest gangbare manieren om dit te bereiken is het gebruik van een zogenaamde query-taal. De query-taal van omega lijkt veel op die van andere zoekmachines, maar kan toch nog wel wat verduidelijking gebruiken.

Zodra omega een query binnenkrijgt zal het die "parsen" tot een werkbare representatie intern. Hiervoor moet de query uiteraard wel goed geconstrueerd zijn, anders levert dit een "parse error" op. Een goed voorbeeld van een verkeerde query is bijvoorbeeld het zoeken op een zin met haakjes zoals "php strlen()", waarbij de gebruiker wil zoeken op de php-functie strlen. Omega gebruikt de haakjes echter voor het opgeven van groepen (zie gebruik voor meer uitleg).

Wanneer er echter een goede zoekopdracht (query) wordt gegeven, dan zal deze uitgevoerd worden en het resultaat teruggegeven worden aan de gebruiker. Afhankelijk van wat de gebruiker heeft opgegeven, worden de resultaten gesorteerd op bijvoorbeeld relevantie of datum. De relevantie wordt bepaald door te kijken naar hoe goed het gevonden document aan de zoekopdracht voldeed, bij "OR-zoekopdrachten" zal een document dat alle zoekwoorden bevat hoger eindigen dan een die er minder bevat. De relevantie wordt natuurlijk ook beïnvloed door de waardering van het veld waar het woord in stond (titel, topicstart of reply) en hoe vaak een gezochte woord voorkomt in het document. Mocht er een datumbereik, groep forums of iets dergelijks opgegeven zijn, dan moeten de resultaten daar natuurlijk ook nog aan voldoen.

Tips en voorbeelden

Vaak is het zo dat, als je niets kan vinden, het opgeven van synoniemen en alternatieve woorden je enorm kan helpen. Vooral de OR operator samen met de haakjes maakt je query dan erg krachtig. Andere keren krijg je juist te veel resultaten: slim gebruik van de AND, NOT en + operator levert dan vaak een veel beter resultaat, ook het opgeven van meer zoektermen kan je resultaat verbeteren.

Bij een standaard OR search zijn er vaak erg veel resultaten, maar zijn enkel de eerste paar resulaten echt relevant. Trek je in dat geval niet te veel aan van het aantal resultaten en probeer een meer specifieke query, of kijk goed naar de topictitels en korte beschrijvingen om te zien of het relevante hits zijn.

Mja, die moet ik verder dus nog bedenken :P


VNU Media logo Hosted by True

© 1998 - 2012 Tweakers.net B.V. - Alle rechten voorbehouden - Contact - Jouw privacy - Algemene Voorwaarden

Uitgever van:

Website van het jaar 2011