Zend_Search_Lucene-Advanced.xml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <sect1 id="zend.search.lucene.advanced">
  2. <title>Pokročilé</title>
  3. <sect2 id="zend.search.lucene.advanced.static">
  4. <title>Použitie indexu ako statickej vlastnosti</title>
  5. <para>
  6. <code>Zend_Search_Lucene</code> objekt využíva deštruktor na zapísanie
  7. zmien a uvoľnenie zdrojov.
  8. </para>
  9. <para>
  10. Pridaná dokumenty sa ukladajú v pamäti a zapísanie novej časti indexu
  11. na disk zavisí od parametra <code>MaxBufferedDocs</code>.
  12. </para>
  13. <para>
  14. Ak ešte nie je dosiahnutý limit určený parametrom <code>MaxBufferedDocs</code>
  15. potom existujú &quot;neuložené&quot; dokumenty ktoré sa uložia ako nový
  16. segment v deštruktore objektu.
  17. Automatická optimalizácia indexu sa spúšťa podľa potreby a jej spustenie
  18. je závislé na parametroch <code>MaxBufferedDocs</code>, <code>MaxMergeDocs</code>
  19. a <code>MergeFactor</code>.
  20. </para>
  21. <para>
  22. Statické vlastnosti objektu sú zničené <emphasis>po</emphasis>
  23. &quot;poslednom riadku bežiaceho skriptu&quot;
  24. <programlisting role="php"><![CDATA[<?php
  25. class Searcher {
  26. private static $_index;
  27. public static function initIndex() {
  28. self::$_index = Zend_Search_Lucene::open('path/to/index');
  29. }
  30. }
  31. Searcher::initIndex();
  32. ]]></programlisting>
  33. </para>
  34. <para>
  35. Predsa len, deštruktor statických vlastností je správne zavolaný
  36. a má možnosť urobiť všetko čo je potrebné.
  37. </para>
  38. <para>
  39. Jedným z problémov sú výnimky. Výnimky ktoré sú vyvolané deštruktorom
  40. statického objektu nemajú kontext, lebo sú vykonané &quot;za koncom
  41. skriptu&quot;
  42. </para>
  43. <para>
  44. V týchto prípadoch dostanente chybu &quot;Fatal error: Exception thrown
  45. without a stack frame in Unknown on line 0&quot; namiesto výnimky.
  46. </para>
  47. <para>
  48. Zend_Search_Lucene poskytuje možnosť na ošetriť tento problému pomocou
  49. metódy <code>commit()</code>. Pri jej zavolaní sa uložia všetky zmeny
  50. a uvoľní pamäť ktorá bola použitá na uloženie nových segmentov. Túto
  51. operáciu je možné urobiť v ľubovoľnom čase alebo aj viackrát počas behu
  52. skriptu. Po tejto operácii je stále možné používať <code>Zend_Search_Lucene</code>
  53. na vyhľadávanie, pridávanie, alebo zmazanie dokumentov. Metóda <code>commit()</code>
  54. zaistí, že už neexistujú žiadne dokumenty na pridanie, alebo zmazanie
  55. a teda deštruktor <code>Zend_Search_Lucene</code> neurobí nič a preto
  56. ani nevznikne žiadna výnimka:
  57. <programlisting role="php"><![CDATA[<?php
  58. class Searcher {
  59. private static $_index;
  60. public static function initIndex() {
  61. self::$_index = Zend_Search_Lucene::open('path/to/index');
  62. }
  63. ...
  64. public static function commit() {
  65. self::$_index->commit();
  66. }
  67. }
  68. Searcher::initIndex();
  69. ...
  70. // Script shutdown routine
  71. ...
  72. Searcher::commit();
  73. ...
  74. ]]></programlisting>
  75. </para>
  76. </sect2>
  77. </sect1>