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>
8 Возможности по созданию и обновлению индекса
9 реализованы в модуле Zend_Search_Lucene и Java Lucene.
10 Вы можете использовать обе эти возможности.
12 Index creation and updating capabilities are implemented within Zend_Search_Lucene module and Java Lucene.
13 You can use both of these capabilities.
18 Приведенный ниже листинг кода PHP дает пример того, как
19 индексировать файл, используя программный интерфейс Zend_Search_Lucene
22 The PHP code listing below provides an example of how to index a file
23 using Zend_Search_Lucene indexing API:
27 <programlisting language="php"><![CDATA[<?php
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>
45 Только что добавленные документы можно сразу извлекать из индекса.
47 Newly added documents could be immediately retrieved from an index.
52 <sect2 id="zend.search.lucene.index-creation.updating">
53 <title>Обновление индекса<!--Updating Index--></title>
56 Та же самая процедура используется при обновлении существующего
57 индекса. Единственное отличие состоит в том, что вместо метода
58 create() вызывается метод open():
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:
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>
80 <sect2 id="zend.search.lucene.index-creation.document-updating">
81 <title>Обновление документов<!--Updating Documents--></title>
84 Формат файлов индекса Lucene не поддерживает обновление документов.
85 Для обновления документ должен быть удален и добавлен снова.
87 Lucene index file format doesn't support document updating. Document should be removed and re-added to do this.
92 Метод <code>Zend_Search_Lucene::delete()</code> оперирует с внутренним
93 идентификатором индекса документа. Он может быть получен из результата
94 запроса ("хит") через свойство 'id':
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:
101 <programlisting language="php"><![CDATA[<?php
103 $hits = $index->find('path:' . $removePath);
104 foreach ($hits as $hit) {
105 $index->delete($hit->id);
107 ?>]]></programlisting>
110 <sect2 id="zend.search.lucene.index-creation.counting">
111 <title>Получение размера индекса<!--Retrieving Index size--></title>
114 В Zend_Search_Lucene есть два способа получения размера индекса.
116 There are two methods to retrieve index size in Zend_Search_Lucene.
121 Метод <code>Zend_Search_Lucene::maxDoc()</code> возвращает число,
122 на единицу большее, чем наибольший возможный номер документа.
123 Фактически это общее количество документов в индексе, включая
124 удаленные. У этого метода есть синоним -
125 <code>Zend_Search_Lucene::count()</code>.
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>.
134 <code>Zend_Search_Lucene::numDocs()</code> возвращает общее
135 количество не удаленных документов.
137 <code>Zend_Search_Lucene::numDocs()</code> returns the total number of non-deleted documents.
141 <programlisting language="php"><![CDATA[<?php
142 $indexSize = $index->count();
143 $documents = $index->numDocs();
144 ?>]]></programlisting>
147 Метод <code>Zend_Search_Lucene::isDeleted($id)</code> может
148 использоваться для проверки того, был ли документ удален.
150 <code>Zend_Search_Lucene::isDeleted($id)</code> method may be used to check if document is deleted.
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";
160 ?>]]></programlisting>
163 При оптимизации индекса производится очищение индекса от удаленных
164 документов и сжатие диапазона используемых идентификаторов. Поэтому
165 внутренний идентификатор документа может изменяться
167 Index optimization removes deleted documents and squeezes documents' IDs. So internal document id may be changed.
172 <sect2 id="zend.search.lucene.index-creation.optimization">
173 <title>Оптимизация индекса<!--Index optimization--></title>
176 Индекс Lucene состоит из сегментов. Каждый сегмент является
177 независимой порцией данных.
179 Lucene index is consist of segments. Each segment is a completely
180 independent portion of data.
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 Новые документы добавляются в индекс путем создания новых сегментов.
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.
198 Увеличение числа сегментов ухудшает качество индекса,
199 но оптимизация индекса восстанавливает его. Оптимизация сводится к
200 объединению нескольких сегментов в один. Этот процедура также не
201 обновляет сегменты. Она создает новый большой сегмент, который
202 содержит новый оптимизированный сегмент вместо набора старых
203 сегментов и обновляет список сегментов (файл 'segments').
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).
216 Полная оптимизация индекса может производиться через вызов метода
217 <code>Zend_Search_Lucene::optimize()</code>. Он объединяет все
218 сегменты индекса в один.
220 Full index optimization can be invoked by <code>Zend_Search_Lucene::optimize()</code> call. It merges all
221 index segments into new one:
224 <programlisting language="php"><![CDATA[<?php
225 // Открытие существующего индекса
226 $index = Zend_Search_Lucene::open('/data/my-index');
228 // Оптимизация индекса
230 ?>]]></programlisting>
233 Автоматическая оптимизация индекса выполняется для
234 поддержания индекса в согласованном состоянии.
236 Automatic index optimization is performed to keep index in a consistent state.
240 Автоматическая оптимизация является итеративным процессом,
241 управление которым производится посредством нескольких опций.
242 В процессе этой оптимизации очень маленькие сегменты объединяются
243 в сегменты большего размера, затем эти сегменты объединяются
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.
252 <sect3 id="zend.search.lucene.index-creation.optimization.maxbuffereddocs">
253 <title>Опция автоматической оптимизации <emphasis>MaxBufferedDocs</emphasis><!--<emphasis>MaxBufferedDocs</emphasis> auto-optimization option--></title>
255 <emphasis>MaxBufferedDocs</emphasis> является наименьшим
256 количеством документов, необходимым для того, чтобы
257 документы из памяти были переписаны в новый сегмент.
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.
265 <emphasis>MaxBufferedDocs</emphasis> может быть получен или
266 установлен через методы <varname>$index->getMaxBufferedDocs()</varname>
267 и <varname>$index->setMaxBufferedDocs($maxBufferedDocs)</varname>
270 <emphasis>MaxBufferedDocs</emphasis> can be retrieved or set by
271 <varname>$index->getMaxBufferedDocs()</varname> or
272 <varname>$index->setMaxBufferedDocs($maxBufferedDocs)</varname> calls.
276 Значение опции по умолчанию равно 10.
283 <sect3 id="zend.search.lucene.index-creation.optimization.maxmergedocs">
284 <title>Опция автоматической оптимизации <emphasis>MaxMergeDocs</emphasis><!--<emphasis>MaxMergeDocs</emphasis> auto-optimization option--></title>
286 <emphasis>MaxMergeDocs</emphasis> является наибольшим количеством
287 документов при достижении которого они всегда объединяются
288 методом addDocument().
289 Меньшие значения (т.е. меньше, чем 10.000) являются наилучшими для
290 интерактивной индексации, так как ограничивает продолжительность
291 пауз в течение индексации до нескольких секунд.
292 Большие значения являются наилучшими для пакетной индексации и
293 более быстрого поиска.
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
305 <emphasis>MaxMergeDocs</emphasis> может быть получен или
306 установлен через методы <varname>$index->getMaxMergeDocs()</varname>
307 и <varname>$index->setMaxMergeDocs($maxMergeDocs)</varname>
310 <emphasis>MaxMergeDocs</emphasis> can be retrieved or set by
311 <varname>$index->getMaxMergeDocs()</varname> or
312 <varname>$index->setMaxMergeDocs($maxMergeDocs)</varname> calls.
316 Значение опции по умолчанию равно PHP_INT_MAX.
318 Default value is PHP_INT_MAX.
323 <sect3 id="zend.search.lucene.index-creation.optimization.mergefactor">
324 <title>Опция автоматической оптимизации <emphasis>MergeFactor</emphasis><!--<emphasis>MergeFactor</emphasis> auto-optimization option--></title>
326 <emphasis>MergeFactor</emphasis> определяет, как часто
327 сегменты индекса объединяются с помощью addDocument().
328 Чем менше значение, тем меньше и объем
329 оперативной памяти, используемой в процессе индексации, и поиск
330 по неоптимизированному индексу производится быстрее,
331 но скорость индексации снижается. Чем больше значение,
332 тем больше и объем используемой оперативной памяти,
333 и индексация производится быстрее,
334 в то время как поиск по неоптимизированному индексу производится медленнее.
335 Таким образом, большие значения (> 10) являются наилучшими
336 в случае пакетной индексации, а меньшие (< 10) —
337 для индексов, которые поддерживаются интерактивно.
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 (> 10) are best for batch
347 index creation, and smaller values (< 10) for indices that
348 are interactively maintained.
352 <emphasis>MergeFactor</emphasis> является хорошим средством
353 оценки среднего количества сегментов, объединяемых в одном
354 прохождении автоматической оптимизации. Слишком большие значения
355 приводят к созданию большого количества сегментов то того, как
356 они объединятся в один новый. Это может вызвать
357 сообщение об ошибке "failed to open stream: Too many open files".
358 Данное ограничение зависит от операционной системы.
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.
369 <emphasis>MergeFactor</emphasis> может быть получен или
370 установлен через методы <varname>$index->getMergeFactor()</varname>
371 и <varname>$index->setMergeFactor($mergeFactor)</varname>
374 <emphasis>MergeFactor</emphasis> can be retrieved or set by
375 <varname>$index->getMergeFactor()</varname> or
376 <varname>$index->setMergeFactor($mergeFactor)</varname> calls.
380 Значение опции по умолчанию равно 10.
386 Lucene Java и Luke (Lucene Index Toolbox -
387 <ulink url="http://www.getopt.org/luke/">http://www.getopt.org/luke/</ulink>)
388 также могут использоваться для оптимизации индекса.
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.
397 <sect2 id="zend.search.lucene.index-creation.limitations">
398 <title>Ограничения<!--Limitationas--></title>
401 Ограничения зависят от платформы.
403 Limitations are platform dependent.
408 Для 32-битной платформы максимальный размер индекса составляет 2Гб.
410 Maximum index size is 2GB for 32-bit platforms.