| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <sect1 id="zend.search.lucene.index-creation">
- <title>Indexes Bouwen</title>
- <sect2 id="zend.search.lucene.index-creation.creating">
- <title>Een Nieuwe Index Maken</title>
- <para>
- De mogelijkheid om nieuwe Indexes te maken en ze up te daten is geïmplementeerd in de Zend_Search_Lucene
- module en Java Lucene.
- Je kan beide mogelijkheden gebruiken.
- </para>
- <para>
- Het volgende PHP code voorbeeld geeft een voorbeeld van hoe een bestand
- kan worden geïndexeerd door de Zend_Search_Lucene indexing API te gebruiken:
- </para>
- <programlisting role="php"><![CDATA[<?php
- // Het tweede argument naar TRUE zetten maakt een nieuwe index
- $index = new Zend_Search_Lucene('/data/mijn-index', true);
- $doc = new Zend_Search_Lucene_Document();
- // De document URL opslaan om het in het zoekresultaat te identificeren.
- $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
- // Documentinhoud indexeren
- $doc->addField(Zend_Search_Lucene_Field::UnStored('inhoud', $docContent));
- // Een document aan de index toevoegen.
- $index->addDocument($doc);
- // De veranderingen naar de index schrijven.
- $index->commit();
- ?>]]></programlisting>
- <para>
- Nieuw toegevoegde documenten kunnen na de commit operatie van de index worden
- verkregen.
- </para>
- <para>
- <code>Zend_Search_Lucene::commit()</code> wordt automatisch opgeroepen aan het einde
- van de script uitvoering en vòòr elke zoekopdracht.
- </para>
- <para>
- Elke oproep van commit() genereert een nieuw index segment.
- <footnote>
- <para>
- Lucene index segment bestanden zijn niet updatebaar. Segment update noodzaakt een volledige
- segment reorganisatie. Zie de Lucene index bestandsformaten voor details
- (<ulink url="http://lucene.apache.org/java/docs/fileformats.html">http://lucene.apache.org/java/docs/fileformats.html</ulink>).
- Het aantal segmenten opvoeren verlaagt de kwaliteit van de index, maar index optimalisatie herstelt dit.
- Optimalisatie beperkt zich tot het bijeen voegen van verscheidene segmenten in één enkel segment. Dit
- proces doet geen update van de segmenten. Het genereert een nieuw groot segment, een nieuwe segmentenlijst
- ('segments.new' bestand) dat het nieuwe segment bevat in plaats van de lijst van oude segmenten, en hernoemt
- dan het bestand 'segments.new' naar 'segments'.
- </para>
- <para>
- Optimalisatie is een iteratief proces. Vele kleine segmenten (die bijvoorbeeld werden gegenereerd door het
- toevoegen van een document) worden in een groter samengevoegd en zo verder. Optimalisatie kan met een segment
- stream werken en verbruikt niet veel geheugen. Samengevat: optimalisatie verbruikt weinig middelen, doet geen
- lock op de index voor het zoeken, updaten of samenvoegen van andere segmenten.
- </para>
- </footnote>
- Het moet dus zo weinig mogelijk worden gebruikt.
- Aan de andere hand, het comitten van een groot aantal documenten in één keer verbruikt meer geheugen.
- </para>
- <para>
- Automatisch segment management optimalisatie is onderdeel van de toekomstige Zend_Search_Lucene
- verbeteringen.
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.updating">
- <title>Index Updaten</title>
- <para>
- Dezelfde procedure wordt gebruikt om een bestaande index up te daten. Het enige verschil is dat de index
- zou moeten worden geopend zonder tweede parameter:
- </para>
- <programlisting role="php"><![CDATA[<?php
- // Een bestaande index openen
- $index = new Zend_Search_Lucene('/data/mijn-index');
- $doc = new Zend_Search_Lucene_Document();
- // Het document URL opslaan om het in het zoekresultaat te identificeren.
- $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
- // Documentinhoud indexeren
- $doc->addField(Zend_Search_Lucene_Field::UnStored('inhoud', $docContent));
- // Een document aan de index toevoegen.
- $index->addDocument($doc);
- // De veranderingen naar de index schrijven.
- $index->commit();
- ?>]]></programlisting>
- <para>
- Elke oproep (impliciet of expliciet) aan commit() genereert een nieuw index segment.
- </para>
- <para>
- Zend_Search_Lucene beheert segmenten niet automatisch. Je moet dus rekening houden met segmentgroottes.
- Een groot segment is meer optimaal, maar heeft meer geheugen nodig tijdens zijn creatie.
- </para>
- <para>
- Lucene Java en Luke (Lucene Index Toolbox - <ulink url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
- kunnen worden geraadpleegd om indexes te optimaliseren met deze versie van Zend_Search_Lucene.
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.index-creation.document-updating">
- <title>Documenten updaten</title>
- <para>
- Het Lucene index bestandformaat ondersteund het updaten van documenten niet. Documenten zouden moeten worden
- verwijderd en opnieuw toegevoegd worden om de index up te daten.
- </para>
- <para>
- De <code>Zend_Search_Lucene::delete()</code> methode werkt met een intern document id index. Deze kan worden
- bekomen via een query hit per 'id' eigenschap:
- </para>
- <programlisting role="php"><![CDATA[<?php
- $removePath = ...;
- $hits = $index->find('path:' . $removePath);
- foreach ($hits as $hit) {
- $index->delete($hit->id);
- }
- $index->commit();
- ?>]]></programlisting>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|