lucene-indexing.xml 4.4 KB

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