Uitbreidbaarheid Tekst analysator De Zend_Search_Lucene_Analysis_Analyzer klasse wordt gebruikt door de indexer om tekstvelden van het document van tokens te voorzien. De Zend_Search_Lucene_Analysis_Analyzer::getDefault() en Zend_Search_Lucene_Analysis_Analyzer::setDefault() methodes worden gebruikt om de standaard analysator te verkrijgen of te zetten. Je kan dus je eigen tekst analysator aanwijzen of er één kiezen uit de aangeboden set van analysators: Zend_Search_Lucene_Analysis_Analyzer_Common_Text en Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive (standaard). Beiden interpreteren tokens als een opeenvolging van letters. Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive past tokens aan naar kleine letters. Om tussen analysatoren te wisselen kan je de volgende code gebruiken: addDocument($doc); ?>]]> De Zend_Search_Lucene_Analysis_Analyzer_Common is ontworpen om de parent van alle door gebruikers gedefinieerde analysatoren te zijn. De gebruiker zou alleen de tokenize() methode moeten schrijven, die een string als input data moet aanvaarden en een array van tokens moet terugsturen. De tokenize() methode zou de normalize() methode op alle tokens moeten toepassen. Dit laat toe token filters te gebuiken met jouw analysator. Hier is een voorbeeld van een zelfgemaakte analysator, welke woorden met cijfers als termen aanvaardt: Custom tekst Analysator normalize($token); } return $tokenStream; } } Zend_Search_Lucene_Analysis_Analyzer::setDefault( new My_Analyzer()); ?>]]> Score Algorithmes De score van een query q voor document d is als volgt gedefinieerd: score(q,d) = sum( tf(t in d) * idf(t) * getBoost(t.field in d) * lengthNorm(t.field in d) ) * coord(q,d) * queryNorm(q) tf(t in d) - Zend_Search_Lucene_Search_Similarity::tf($freq) - een score factor gebaseerd op de frequentie van een term of zin in een document. idf(t) - Zend_Search_Lucene_Search_SimilaritySimilarity::tf($term, $reader) - een score factor van een eenvoudige term voor de gespecificeerde index. getBoost(t.field in d) - boost factor voor het termveld. lengthNorm($term) - de normalisatiewaarde voor een veld, gegeven het totaal aantal termen in een veld. Deze waarde wordt opgeslagen met de index. Deze waarden, samen met de veldboosts, worden opgeslaan in een index en vermenigvuldigd in scores door de zoekcode voor hits op elk veld. Overeenkomsten op langere velden zijn minder precies, dus geven implementaties van deze methode meestal kleinere waarden terug als numTokens groot is, en grotere waarden als numTokens klein is. coord(q,d) - Zend_Search_Lucene_Search_Similarity::coord($overlap, $maxOverlap) - een score factor gebaseerd op de fractie van alle query termen dat een document bevat. De aanwezigheid van een groot deel van de query termen duidt een betere overeenkomst met de query aan, dus zullen implementaties van deze methode meestal grotere waarden teruggeven wanneer de ratio tussen deze parameters groot is en kleinere waarden wanneer de ratio ertussen klein is. queryNorm(q) - de normalizatiewaarde voor een query gegeven de som van de gewichten van elk van de querytermen in het vierkant. Het gewicht van elke query term wordt dan vermenigvuldigd met deze waarde. Dit beïnvloedt het ordenen niet, maar probeert enkel scores van verschillende queries vergelijkbaar te maken. Het scoring algoritme kan verpersoonlijkt worden door je eigen Similarity klasse te maken. Om dit te doen moet je de Zend_Search_Lucene_Search_Similarity klasse uitbreiden zoals hierna is gedefinieerd, en dan de Zend_Search_Lucene_Search_Similarity::setDefault($similarity); methode gebruiken om het tot standaard te zetten. ]]> Opslag containers Een abstracte klasse Zend_Search_Lucene_Storage_Directory definieert mapfunctionaliteit. De Zend_Search_Lucene constructor gebruikt ofwel een string of een Zend_Search_Lucene_Storage_Directory object als input. De Zend_Search_Lucene_Storage_Directory_Filesystem klasse implementeert mapfunctionaliteit voor het bestandssyteem. Indien een string werd opgegeven als input voor de Zend_Search_Lucene constructor, zal de indexlezer (Zend_Search_Lucene object) het beschouwen als een bestandssysteempad en zelf een Zend_Search_Lucene_Storage_Directory_Filesystem object instantiëren. Je kan je eigen implementatiemap definiëren door de Zend_Search_Lucene_Storage_Directory klasse uit te breiden. Zend_Search_Lucene_Storage_Directory methodes: ]]> De getFileObject($filename) methode van de Zend_Search_Lucene_Storage_Directory klasse geeft een Zend_Search_Lucene_Storage_File object terug. De abstrakte klasse Zend_Search_Lucene_Storage_File implementeert bestandsabstractie en voorziet in indexbestand leesprimitieven. Je moet ook de Zend_Search_Lucene_Storage_File klasse uitbreiden voor jouw Directory implementatie. Slechts twee methodes van de Zend_Search_Lucene_Storage_File klasse hoeven te worden overloaded in jouw implementatie: ]]>