# 索引付け

索引付けは、既存または新しいインデックスに新しい文書を追加することにより実行されます。

    $index->addDocument($doc);

文書オブジェクトを生成する方法は2つあります。 その一つは、手動で行なうことです。

手動の文書構成

    $doc = new Zend_Search_Lucene_Document();
    $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
    $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
    $doc->addField(Zend_Search_Lucene_Field::unStored('contents', $docBody));
    $doc->addField(Zend_Search_Lucene_Field::binary('avatar', $avatarData));

2つ目の方法は、HTML または Microsoft Office 2007 ファイルから読み込むことです。

文書読み込み

    $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
    $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($path);
    $doc = Zend_Search_Lucene_Document_Pptx::loadPptFile($path);
    $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($path);

サポートされる形式のいずれかから文書が読み込まれた場合、 新しいユーザー定義項目でやはり手動で拡張できます。

## 索引付けの方針

アプリケーション方式設計の中で索引付けの方針を定義しなければなりません。

オンデマンドでの索引付けの構成を必要とするかもしれません （OLTPシステムのような何か）。 そのようなシステムでは、通常ユーザーリクエスト毎に文書を１つ追加します。 このように、MaxBufferedDocs オプションは、システムに影響を及ぼしません。 一方では、スクリプトの最大実行時間を制限できるので、 MaxMergeDocsはとても便利です。 MergeFactor は、平均的な索引付け時間 （平均的な自動最適化時間によっても影響されます）と、 検索のパフォーマンス （インデックス最適化レベルはセグメント数に依存します） との間のバランスを保つ値に設定すべきです。

主にバッチのインデックス更新を実行しているなら、構成では、 利用可能なメモリー量でサポートされる最大値に設定された MaxBufferedDocsオプションを使用すべきです。 MaxMergeDocs と MergeFactor は、 できる限り自動最適化関係を減らす値に設定されなければなりません。

追加の制限は、 並列のオープン操作のために OS によってサポートされるファイル・ハンドラーの最大です。

完全なインデックス最適化は、索引付けの後に利用されなければなりません。

インデックスの最適化

    $index->optimize();

一部の構成では、 it's more effective to serialize index updates by organizing update requests into a queue and processing several update requests in a single script execution. これは、インデックスのオープンのオーバーヘッドを減らし、 インデックス文書のバッファリングを利用できるようにします。