lucene-indexing.xml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 19807 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.lucene.indexing">
  5. <title>Indexation</title>
  6. <para>
  7. L'indexation s'effectue en ajoutant un nouveau document à un index existant ou à un nouvel
  8. index :
  9. </para>
  10. <programlisting language="php"><![CDATA[
  11. $index->addDocument($doc);
  12. ]]></programlisting>
  13. <para>
  14. Il y a deux manières de créer un objet document. La première est de le faire manuellement.
  15. </para>
  16. <example id="learning.lucene.indexing.doc-creation">
  17. <title>Construction manuel de document</title>
  18. <programlisting language="php"><![CDATA[
  19. $doc = new Zend_Search_Lucene_Document();
  20. $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
  21. $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
  22. $doc->addField(Zend_Search_Lucene_Field::unStored('contents', $docBody));
  23. $doc->addField(Zend_Search_Lucene_Field::binary('avatar', $avatarData));
  24. ]]></programlisting>
  25. </example>
  26. <para>
  27. La seconde méthode est de le charger depuis un fichier <acronym>HTML</acronym>
  28. ou Microsoft Office 2007 :
  29. </para>
  30. <example id="learning.lucene.indexing.doc-loading">
  31. <title>Chargement de document</title>
  32. <programlisting language="php"><![CDATA[
  33. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  34. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path);
  35. $doc = Zend_Search_Lucene_Document_Pptx::loadPptFile($path);
  36. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path);
  37. ]]></programlisting>
  38. </example>
  39. <para>
  40. Si un document est chargé depuis l'un des formats supportés, il peut quand même être étendu
  41. manuellement avec des champs définis par l'utilisateur.
  42. </para>
  43. <sect2 id="learning.lucene.indexing.policy">
  44. <title>Politique d'indexation</title>
  45. <para>
  46. Vous devrez définir votre politique d'indexation au sein de la conception de
  47. l'architecture de votre application.
  48. </para>
  49. <para>
  50. Vous pourriez avoir besoin d'une configuration d'indexation à la demande
  51. (quelque chose comme le système <acronym>OLTP</acronym>).
  52. Sur de test systèmes, vous ajoutez généralement un document par requête utilisateur.
  53. De cette manière, l'option <emphasis>MaxBufferedDocs</emphasis> n'affectera pas le
  54. système. D'un autre coté, <emphasis>MaxMergeDocs</emphasis> est vraiment utile, car il
  55. vous permet de limiter le temps d'exécution maximum du script.
  56. <emphasis>MergeFactor</emphasis> doit être définis par une valeur qui conserve un
  57. équilibre entre le temps moyen d'indexation (il est aussi affecté par temps
  58. d'optimisation moyen) et les performance de recherche (le niveau d'optimisation dépend
  59. du nombre de segments).
  60. </para>
  61. <para>
  62. Si vous allez surtout effectuer des mises à jour d'index par lot, votre configuration
  63. devrait utiliser une option <emphasis>MaxBufferedDocs</emphasis> définis à la valeur
  64. maximum supporté par la quantité de mémoire disponible.
  65. <emphasis>MaxMergeDocs</emphasis> et <emphasis>MergeFactor</emphasis> doivent être
  66. définis à des valeurs réduisant au maximum le recours à l'auto-optimisation
  67. <footnote><para>Une limite additionnelle est le nombre maximum de gestionnaire de
  68. fichiers supporter par le système d'exploitation pour les opérations concurrente
  69. d'ouverture</para></footnote>. Les optimisations complètes d'index doivent être
  70. appliquées après l'indexation.
  71. </para>
  72. <example id="learning.lucene.indexing.optimization">
  73. <title>Optimisation d'index</title>
  74. <programlisting language="php"><![CDATA[
  75. $index->optimize();
  76. ]]></programlisting>
  77. </example>
  78. <para>
  79. Dans certaines configuration, il est plus efficace d'effectuer une série de mise à jour
  80. de l'index en organisant une file de requête de mise à jour et de traiter plusieurs
  81. requête de mise à jour dans une seule exécution de script. Ceci réduit la charge
  82. d'ouverture de l'index et permet d'utiliser le tampon de document de l'index.
  83. </para>
  84. </sect2>
  85. </sect1>