[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Search_Lucene-IndexCreation.xml
blob0815647714f99ccd57ed19d4ad8b54cd73d51d91
1 <sect1 id="zend.search.lucene.index-creation">
2     <title>Индексация<!--Building Indexes--></title>
4     <sect2 id="zend.search.lucene.index-creation.creating">
5         <title>Создание нового индекса<!--Creating a New Index--></title>
7         <para>
8             Возможности по созданию и обновлению индекса
9             реализованы в модуле Zend_Search_Lucene и Java Lucene.
10             Вы можете использовать обе эти возможности.
11 <!--
12             Index creation and updating capabilities are implemented within Zend_Search_Lucene module and Java Lucene.
13             You can use both of these capabilities.
14 -->
15         </para>
17         <para>
18             Приведенный ниже листинг кода PHP дает пример того, как
19             индексировать файл, используя программный интерфейс Zend_Search_Lucene
20             для индексирования.
21 <!--
22             The PHP code listing below provides an example of how to index a file
23             using Zend_Search_Lucene indexing API:
24 -->
25         </para>
27         <programlisting language="php"><![CDATA[<?php
28 // Создание индекса
29 $index = Zend_Search_Lucene::create('/data/my-index');
31 $doc = new Zend_Search_Lucene_Document();
33 // Сохранение URL документа для того, чтобы идентифицировать его
34 // в результатах поиска
35 $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
37 // Индексирование содержимого документа
38 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
40 // Добавление документа в индекс
41 $index->addDocument($doc);
42 ?>]]></programlisting>
44         <para>
45             Только что добавленные документы можно сразу извлекать из индекса.
46 <!--
47             Newly added documents could be immediately retrieved from an index.
48 -->
49         </para>
50     </sect2>
52     <sect2 id="zend.search.lucene.index-creation.updating">
53         <title>Обновление индекса<!--Updating Index--></title>
55         <para>
56             Та же самая процедура используется при обновлении существующего
57             индекса. Единственное отличие состоит в том, что вместо метода
58             create() вызывается метод open():
59 <!--
60             The same procedure is used to update an existing index. The only difference
61             is that the open() method is called instead of the create() method:
62 -->
63         </para>
65         <programlisting language="php"><![CDATA[<?php
66 // Открытие существующего индекса
67 $index = Zend_Search_Lucene::open('/data/my-index');
69 $doc = new Zend_Search_Lucene_Document();
70 // Сохраниение URL документа для того, чтобы идентифицировать его в результатах поиска.
71 $doc->addField(Zend_Search_Lucene_Field::Text('url', $docUrl));
72 // Индексация содержимого документа.
73 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docContent));
75 // Добавление документа в индекс.
76 $index->addDocument($doc);
77 ?>]]>   </programlisting>
78     </sect2>
80     <sect2 id="zend.search.lucene.index-creation.document-updating">
81         <title>Обновление документов<!--Updating Documents--></title>
83         <para>
84             Формат файлов индекса Lucene не поддерживает обновление документов.
85             Для обновления документ должен быть удален и добавлен снова.
86 <!--
87             Lucene index file format doesn't support document updating. Document should be removed and re-added to do this.
88 -->
89         </para>
91         <para>
92             Метод <code>Zend_Search_Lucene::delete()</code> оперирует с внутренним
93             идентификатором индекса документа. Он может быть получен из результата
94             запроса ("хит") через свойство 'id':
95 <!--
96             <code>Zend_Search_Lucene::delete()</code> method operates with an internal index document id. It can be retrieved
97             from a query hit by 'id' property:
98 -->
99         </para>
101         <programlisting language="php"><![CDATA[<?php
102 $removePath = ...;
103 $hits = $index->find('path:' . $removePath);
104 foreach ($hits as $hit) {
105     $index->delete($hit->id);
107 ?>]]></programlisting>
108     </sect2>
110     <sect2 id="zend.search.lucene.index-creation.counting">
111         <title>Получение размера индекса<!--Retrieving Index size--></title>
113         <para>
114             В Zend_Search_Lucene есть два способа получения размера индекса.
115 <!--
116             There are two methods to retrieve index size in Zend_Search_Lucene.
118         </para>
120         <para>
121              Метод <code>Zend_Search_Lucene::maxDoc()</code> возвращает число,
122              на единицу большее, чем наибольший возможный номер документа.
123              Фактически это общее количество документов в индексе, включая
124              удаленные. У этого метода есть синоним -
125              <code>Zend_Search_Lucene::count()</code>.
126 <!--
127              <code>Zend_Search_Lucene::maxDoc()</code> returns one greater than the largest possible document number.
128              It's actually overall number of the documents in the index including deleted documents.
129              So it has a synonym: <code>Zend_Search_Lucene::count()</code>.
131         </para>
133         <para>
134              <code>Zend_Search_Lucene::numDocs()</code> возвращает общее
135              количество не удаленных документов.
136 <!--
137              <code>Zend_Search_Lucene::numDocs()</code> returns the total number of non-deleted documents.
139         </para>
141         <programlisting language="php"><![CDATA[<?php
142 $indexSize = $index->count();
143 $documents = $index->numDocs();
144 ?>]]></programlisting>
146         <para>
147             Метод <code>Zend_Search_Lucene::isDeleted($id)</code> может
148             использоваться для проверки того, был ли документ удален.
149 <!--
150             <code>Zend_Search_Lucene::isDeleted($id)</code> method may be used to check if document is deleted.
152         </para>
154         <programlisting language="php"><![CDATA[<?php
155 for ($count = 0; $count < $index->maxDoc(); $count++) {
156     if ($index->isDeleted($count)) {
157         echo "Document #$id is deleted.\n";
158     }
160 ?>]]></programlisting>
162         <para>
163             При оптимизации индекса производится очищение индекса от удаленных
164             документов и сжатие диапазона используемых идентификаторов. Поэтому
165             внутренний идентификатор документа может изменяться
166 <!--
167             Index optimization removes deleted documents and squeezes documents' IDs. So internal document id may be changed.
169         </para>
170     </sect2>
172     <sect2 id="zend.search.lucene.index-creation.optimization">
173         <title>Оптимизация индекса<!--Index optimization--></title>
175         <para>
176             Индекс Lucene состоит из сегментов. Каждый сегмент является
177             независимой порцией данных.
178 <!--
179             Lucene index is consist of segments. Each segment is a completely
180             independent portion of data.
182         </para>
183         <para>
184             Файлы сегментов индекса Lucene по своей природе не могут обновляться.
185             Обновление сегмента требует его полной реорганизации.
186             За подробностями см. форматы файлов индекса
187             (<ulink url="http://lucene.apache.org/java/docs/fileformats.html">http://lucene.apache.org/java/docs/fileformats.html</ulink>).
188             Новые документы добавляются в индекс путем создания новых сегментов.
189 <!--
190             Lucene index segment files can't be updated by their nature.
191             A segment update needs full segment
192             reorganization. See Lucene index file formats for details
193             (<ulink url="http://lucene.apache.org/java/docs/fileformats.html">http://lucene.apache.org/java/docs/fileformats.html</ulink>).
194             Thus new documents are added to the index by creating new segment.
196         </para>
197         <para>
198             Увеличение числа сегментов ухудшает качество индекса,
199             но оптимизация индекса восстанавливает его. Оптимизация сводится к
200             объединению нескольких сегментов в один. Этот процедура также не
201             обновляет сегменты. Она создает новый большой сегмент, который
202             содержит новый оптимизированный сегмент вместо набора старых
203             сегментов и обновляет список сегментов (файл 'segments').
204 <!--
205             Increasing number of segments reduces quality of the index,
206             but index optimization restores it.
207             Optimization is reduced to merging several segments into one.
208             This process also doesn't update segments.
209             It generates new large segment, which contains new optimized
210             segment instead of the set of old segments,
211             and updates segment list ('segments' file).
213         </para>
215         <para>
216             Полная оптимизация индекса может производиться через вызов метода
217             <code>Zend_Search_Lucene::optimize()</code>. Он объединяет все
218             сегменты индекса в один.
219 <!--
220             Full index optimization can be invoked by <code>Zend_Search_Lucene::optimize()</code> call. It merges all
221             index segments into new one:
223         </para>
224         <programlisting language="php"><![CDATA[<?php
225 // Открытие существующего индекса
226 $index = Zend_Search_Lucene::open('/data/my-index');
228 // Оптимизация индекса
229 $index->optimize();
230 ?>]]></programlisting>
232         <para>
233             Автоматическая оптимизация индекса выполняется для
234             поддержания индекса в согласованном состоянии.
235 <!--
236             Automatic index optimization is performed to keep index in a consistent state.
238         </para>
239         <para>
240             Автоматическая оптимизация является итеративным процессом,
241             управление которым производится посредством нескольких опций.
242             В процессе этой оптимизации очень маленькие сегменты объединяются
243             в сегменты большего размера, затем эти сегменты объединяются
244             в еще большие и т.д.
245 <!--
246             Automatic optimization is an iterative process managed by several index options.
247             It merges very small segments
248             into larger one, then merges these larger segments into more larger and so on.
250         </para>
252         <sect3 id="zend.search.lucene.index-creation.optimization.maxbuffereddocs">
253             <title>Опция автоматической оптимизации <emphasis>MaxBufferedDocs</emphasis><!--<emphasis>MaxBufferedDocs</emphasis> auto-optimization option--></title>
254             <para>
255                 <emphasis>MaxBufferedDocs</emphasis> является наименьшим
256                 количеством документов, необходимым для того, чтобы
257                 документы из памяти были переписаны в новый сегмент.
258 <!--
259                 <emphasis>MaxBufferedDocs</emphasis> is a minimal number of
260                 documents required before
261                 the buffered in-memory documents are written into a new Segment.
263             </para>
264             <para>
265                 <emphasis>MaxBufferedDocs</emphasis> может быть получен или
266                 установлен через методы <varname>$index->getMaxBufferedDocs()</varname>
267                 и <varname>$index->setMaxBufferedDocs($maxBufferedDocs)</varname>
268                 соответственно.
269 <!--
270                 <emphasis>MaxBufferedDocs</emphasis> can be retrieved or set by
271                 <varname>$index->getMaxBufferedDocs()</varname> or
272                 <varname>$index->setMaxBufferedDocs($maxBufferedDocs)</varname> calls.
274             </para>
275             <para>
276                 Значение опции по умолчанию равно 10.
277 <!--
278                 Default value is 10.
280             </para>
281         </sect3>
283         <sect3 id="zend.search.lucene.index-creation.optimization.maxmergedocs">
284             <title>Опция автоматической оптимизации <emphasis>MaxMergeDocs</emphasis><!--<emphasis>MaxMergeDocs</emphasis> auto-optimization option--></title>
285             <para>
286                 <emphasis>MaxMergeDocs</emphasis> является наибольшим количеством
287                 документов при достижении которого они всегда объединяются
288                 методом addDocument().
289                 Меньшие значения (т.е. меньше, чем 10.000) являются наилучшими для
290                 интерактивной индексации, так как ограничивает продолжительность
291                 пауз в течение индексации до нескольких секунд.
292                 Большие значения являются наилучшими для пакетной индексации и
293                 более быстрого поиска.
294 <!--
295                 <emphasis>MaxMergeDocs</emphasis> is a largest number of documents
296                 ever merged by addDocument().
297                 Small values (e.g., less than 10.000) are best for interactive
298                 indexing, as this limits the length
299                 of pauses while indexing to a few seconds. Larger values are
300                 best for batched indexing and speedier
301                 searches.
303             </para>
304             <para>
305                 <emphasis>MaxMergeDocs</emphasis> может быть получен или
306                 установлен через методы <varname>$index->getMaxMergeDocs()</varname>
307                 и <varname>$index->setMaxMergeDocs($maxMergeDocs)</varname>
308                 соответственно.
309 <!--
310                 <emphasis>MaxMergeDocs</emphasis> can be retrieved or set by
311                 <varname>$index->getMaxMergeDocs()</varname> or
312                 <varname>$index->setMaxMergeDocs($maxMergeDocs)</varname> calls.
314             </para>
315             <para>
316                 Значение опции по умолчанию равно PHP_INT_MAX.
317 <!--
318                 Default value is PHP_INT_MAX.
320             </para>
321         </sect3>
323         <sect3 id="zend.search.lucene.index-creation.optimization.mergefactor">
324             <title>Опция автоматической оптимизации <emphasis>MergeFactor</emphasis><!--<emphasis>MergeFactor</emphasis> auto-optimization option--></title>
325             <para>
326                 <emphasis>MergeFactor</emphasis> определяет, как часто
327                 сегменты индекса объединяются с помощью addDocument().
328                 Чем менше значение, тем меньше и объем
329                 оперативной памяти, используемой в процессе индексации, и поиск
330                 по неоптимизированному индексу производится быстрее,
331                 но скорость индексации снижается. Чем больше значение,
332                 тем больше и объем используемой оперативной памяти,
333                 и индексация производится быстрее,
334                 в то время как поиск по неоптимизированному индексу производится медленнее.
335                 Таким образом, большие значения (&gt; 10) являются наилучшими
336                 в случае пакетной индексации, а меньшие (&lt; 10) —
337                 для индексов, которые поддерживаются интерактивно.
338 <!--
339                 <emphasis>MergeFactor</emphasis> determines how often segment
340                 indices are merged by addDocument().
341                 With smaller values, less RAM is used while indexing, and
342                 searches on unoptimized indices are faster,
343                 but indexing speed is slower. With larger values, more RAM is
344                 used during indexing, and while searches
345                 on unoptimized indices are slower, indexing is faster. Thus
346                 larger values (&gt; 10) are best for batch
347                 index creation, and smaller values (&lt; 10) for indices that
348                 are interactively maintained.
350             </para>
351             <para>
352                 <emphasis>MergeFactor</emphasis> является хорошим средством
353                 оценки среднего количества сегментов, объединяемых в одном
354                 прохождении автоматической оптимизации. Слишком большие значения
355                 приводят к созданию большого количества сегментов то того, как
356                 они объединятся в один новый. Это может вызвать
357                 сообщение об ошибке "failed to open stream: Too many open files".
358                 Данное ограничение зависит от операционной системы.
359 <!--
360                 <emphasis>MergeFactor</emphasis> is a good estimation for average
361                 number of segments merged by one auto-optimization pass.
362                 Too large values produce large number of segments while they are
363                 not merged into new one. It may be a cause of
364                 "failed to open stream: Too many open files" error message.
365                 This limitation is system dependant.
367             </para>
368             <para>
369                 <emphasis>MergeFactor</emphasis> может быть получен или
370                 установлен через методы <varname>$index->getMergeFactor()</varname>
371                 и <varname>$index->setMergeFactor($mergeFactor)</varname>
372                 соответственно.
373 <!--
374                 <emphasis>MergeFactor</emphasis> can be retrieved or set by
375                 <varname>$index->getMergeFactor()</varname> or
376                 <varname>$index->setMergeFactor($mergeFactor)</varname> calls.
378             </para>
379             <para>
380                 Значение опции по умолчанию равно 10.
381 <!--
382                 Default value is 10.
384             </para>
385             <para>
386                 Lucene Java и Luke (Lucene Index Toolbox -
387                 <ulink url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
388                 также могут использоваться для оптимизации индекса.
389 <!--
390                 Lucene Java and Luke (Lucene Index Toolbox - <ulink url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
391                 can also be used to optimize index.
393             </para>
394         </sect3>
395     </sect2>
397     <sect2 id="zend.search.lucene.index-creation.limitations">
398         <title>Ограничения<!--Limitationas--></title>
400         <para>
401             Ограничения зависят от платформы.
402 <!--
403             Limitations are platform dependent.
405         </para>
407         <para>
408             Для 32-битной платформы максимальный размер индекса составляет 2Гб.
409 <!--
410             Maximum index size is 2GB for 32-bit platforms.
412         </para>
413     </sect2>
415 </sect1>
417 <!--
418 vim:se ts=4 sw=4 et: