[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ru / module_specs / Zend_Search_Lucene-Overview.xml
blob8eb953e1e93e02a78d6a2ccf66265cbc89a4523d
1 <sect1 id="zend.search.lucene.overview">
2     <title>Обзор</title>
4     <sect2 id="zend.search.lucene.introduction">
5         <title>Введение</title>
6         <para>
7             Zend_Search_Lucene является поисковым движком общего
8             назначения для полнотекстового поиска, написанным полностью на PHP 5.
9             Так как он хранит индекс в файловой системе и не требует наличия
10             сервера баз данных, то дает
11             возможность реализовать поиск практически для всех веб-сайтов, работающих
12             под управлением PHP. Zend_Search_Lucene поддерживает следующие
13             возможности:
14 <!--
15             Zend_Search_Lucene is a general purpose text search engine written entirely in PHP 5.
16             Since it stores its index on the filesystem and does not require a database
17             server, it can add search capabilities to almost any PHP-driven website.
18             Zend_Search_Lucene supports the following features:
19 -->
20             <itemizedlist>
21                 <listitem>
22                     <para>
23                         Ранжированный поиск — более подходящие результаты возвращаются первыми
24 <!--
25                         Ranked searching - best results returned first
26 -->
27                     </para>
28                 </listitem>
29                 <listitem>
30                     <para>
31                        Множество типов запросов: поиск фраз, поиск с шаблонами,
32                        поиск по критерию близости, поиск по диапазону значений
33                        и т.д.
34 <!--
35                        Many powerful query types: phrase queries, wildcard queries,
36                        proximity queries, range queries and more
37 -->
38                         <footnote>
39                            <para>
40                              Сейчас поддерживается поиск по одному и нескольким
41                              элементам, фразам, булевы операторы и подзапросы.
42 <!--
43                              Term, multi term, phrase queries, boolean expressions and subqueries are supported at this time.
44 -->
45                            </para>
46                         </footnote>
47                     </para>
48                 </listitem>
49                 <listitem>
50                     <para>
51                         Поиск по определенному полю (например: заголовок, автор,
52                         содержимое)
53 <!--
54                         Search by specific field (e.g., title, author, contents)
55 -->
56                     </para>
57                 </listitem>
58             </itemizedlist>
59             Zend_Search_Lucene произошел от проекта Apache Lucene.
60             За более подробной информацией см.
61 <!--
62             Zend_Search_Lucene was derived from the Apache Lucene project.  For more
63             information on Lucene, visit
64 -->
65             <ulink url="http://lucene.apache.org/java/docs/"/>.
66         </para>
67     </sect2>
69     <sect2 id="zend.search.lucene.index-creation.documents-and-fields">
70         <title>Объекты документа и поля<!--Document and Field Objects--></title>
71             <para>
72                 Zend_Search_Lucene оперирует с документами как с элементарными
73                 объектами для индексации. Документ делится на именованные поля,
74                 содержащие контент, по которому может производиться поиск.
75 <!--
76                 Zend_Search_Lucene operates with documents as atomic subjects for indexing.  A document is
77                 divided into named fields, and fields have content that can be searched.
78 -->
79             </para>
81             <para>
82                 Документ представлен объектом Zend_Search_Lucene_Document,
83                 этот объект содержит объекты Zend_Search_Lucene_Field,
84                 представляющие собой поля документа.
85 <!--
86                 A document is represented by the Zend_Search_Lucene_Document object, and this object contains
87                 Zend_Search_Lucene_Field objects that represent the fields.
88 -->
89             </para>
91             <para>
92                 Важно отметить, что в индекс может быть добавлена любая информация.
93                 Данные вашего приложения или метаданные могут сохраняться в
94                 полях документа и после извлекаться вместе с документом в процессе
95                 поиска.
96 <!--
97                 It is important to note that any kind of information can be added to the index.
98                 Application-specific information or metadata can be stored in the document
99                 fields, and later retrieved with the document during search.
101             </para>
103             <para>
104                 Приложение отвественно за процесс индексации.
105                 Как следствие, проиндексированы могут быть данные из любых
106                 источников, доступных приложению. Например, это
107                 могут быть файловая система, база данных, форма HTML и т.д.
108 <!--
109                 It is the responsibility of your application to control the indexer.
110                 This means that data can be indexed from any source
111                 that is accessible by your application.  For example, this could be the
112                 filesystem, a database, an HTML form, etc.
114             </para>
116             <para>
117                 Класс <code>Zend_Search_Lucene_Field</code> предоставляет
118                 несколько статических методов для создания полей с различными
119                 характеристиками.
120 <!--
121                 <code>Zend_Search_Lucene_Field</code> class provides several
122                 static methods to create fields with
123                 different characteristics:
125             </para>
127             <programlisting language="php"><![CDATA[<?php
128 $doc = new Zend_Search_Lucene_Document();
130 // Данные поля не разбиваются на лексемы,
131 // но индексируются и полностью сохраняются в индексе.
132 // Сохраненные данные поля могут быть получены из индекса.
133 $doc->addField(Zend_Search_Lucene_Field::Keyword('doctype',
134                                                  'autogenerated'));
136 // Данные поля не разбиваются на лексемы и не индексируются,
137 // но полностью сохраняются в индексе.
138 $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
139                                                    time()));
141 // Бинарное поле, данные которого не разбиваются на лексемы и не индексируются,
142 // но сохраняются в индексе.
143 $doc->addField(Zend_Search_Lucene_Field::Binary('icon',
144                                                 $iconData));
146 // Данные поля разбиваются на лексемы, индексируются
147 // и полностью сохраняются в индексе.
148 $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
149                                               'Document annotation text'));
151 // Данные поля разбиваются на лексемы и индексируются,
152 // но не сохраняются в индексе.
153 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
154                                                   'My document content'));
156 ?>]]></programlisting>
158             <para>
159                 Каждый из этх методов (исключая метод <code>Zend_Search_Lucene_Field::Binary()</code>)
160                 имеет необязательный параметр <varname>$encoding</varname>. Через него
161                 указывается кодировка для входных данных.
162 <!--
163                 Each of these methods (excluding <code>Zend_Search_Lucene_Field::Binary()</code> method) has optional
164                 <varname>$encoding</varname> parаmeter. It specifies input data encoding.
166             </para>
168             <para>
169                 Кодировка может различаться как для документов, так и для
170                 полей в одном документе.
171 <!--
172                 Encoding may differ for different documents as well as for different fields within one document:
175                 <programlisting language="php"><![CDATA[<?php
176 $doc = new Zend_Search_Lucene_Document();
177 $doc->addField(Zend_Search_Lucene_Field::Text('title', $title, 'iso-8859-1'));
178 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents, 'utf-8'));
179 ?>]]></programlisting>
180             </para>
182             <para>
183                 Если этот параметр опущен, то используется текущая локаль.
184                 Например:
185 <!--
186                 If encoding parameter is omitted, then current locale is used at processing time. For example:
188                 <programlisting language="php"><![CDATA[<?php
189 setlocale(LC_ALL, 'de_DE.iso-8859-1');
191 $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents));
192 ?>]]></programlisting>
193             </para>
195             <para>
196                 Поля всегда сохраняются и возвращаются из индекса в кодировке
197                 UTF-8. Преобразование в UTF-8 производится автоматически.
198 <!--
199                 Fields are always stored and returned from index in UTF-8 encoding. Conversion to UTF-8 proceeds
200                 automatically.
202             </para>
204             <para>
205                 Анализатор текста (<link linkend="zend.search.lucene.extending.analysis">см. далее</link>)
206                 может также преобразовывать текст в другие кодировки. В
207                 настоящее время используемый по умолчанию анализатор преобразует
208                 текст в кодировку 'ASCII//TRANSLIT'. Имейте в виду, что такое
209                 преобразование может зависеть от текущей локали.
210 <!--
211                 Text analyzers (<link linkend="zend.search.lucene.extending.analysis">see below</link>) may also convert text
212                 to some other encodings. Actually, default analyzer converts text to 'ASCII//TRANSLIT' encoding.
213                 Be care with this, such translation may depend on current locale.
215             </para>
217             <para>
218                 Имена полей могут быть любыми.
219 <!--
220                 Fields' names are defined only by your own choice.
222             </para>
224             <para>
225                 Java Lucene по умолчанию использует для поиска поле "contents".
226                 Zend_Search_Lucene по умолчанию производит поиск по всем полям,
227                 но это поведение можно изменить. За подробностями см.
228                 <link linkend="zend.search.lucene.query-language.fields">Поля для поиска</link>.
229 <!--
230                 Java Lucene uses "contents" field as a default field to search.
231                 Zend_Search_Lucene searches through all fiels by default, but it's also possible to change this behavior.
232                 See <link linkend="zend.search.lucene.query-language.fields">"Default search field"</link> chapter for details.
234             </para>
235     </sect2>
237     <sect2 id="zend.search.lucene.index-creation.understanding-field-types">
238         <title>Значение типов полей<!--Understanding Field Types--></title>
239         <itemizedlist>
240             <listitem>
241                 <para>
242                     Поля <code>Keyword</code> полностью сохраняются и индексируются,
243                     это означает, что можно не только производить поиск в них,
244                     но и отображать их в результатах поиска.
245                     Они не делятся на отдельные слова посредством разбиения
246                     на лексемы. Нумерованные поля БД обычно преобразуются в поля Keyword
247                     в Zend_Search_Lucene.
248 <!--
249                     <code>Keyword</code> fields are stored and indexed, meaning that they can be searched as well
250                     as displayed in search results. They are not split up into separate words by tokenization.
251                     Enumerated database fields usually translate well to Keyword fields in Zend_Search_Lucene.
253                 </para>
254             </listitem>
255             <listitem>
256                 <para>
257                     В полях <code>UnIndexed</code> нельзя производить поиск,
258                     но они возвращаются в результатах поиска. Поля timestamp,
259                     ключевые поля, пути в файловой системе и другие
260                     внешние идентификаторы — хорошие кандидаты для того, чтобы
261                     быть полями UnIndexed.
262 <!--
263                     <code>UnIndexed</code> fields are not searchable, but they are returned with search hits.  Database
264                     timestamps, primary keys, file system paths, and other external identifiers are good
265                     candidates for UnIndexed fields.
267                 </para>
268             </listitem>
269             <listitem>
270                 <para>
271                     Поля <code>Binary</code> не разбиваются на лексемы и не индексируются,
272                     но сохраняются для возвращения в результатах поиска.
273                     Они могут использоваться для хранения любых данных,
274                     закодированных в виде бинарной строки — как, например,
275                     иконки.
276 <!--
277                     <code>Binary</code> fields are not tokenized or indexed, but are stored for retrieval with search hits.
278                     They can be used to store any data encoded as a binary string, such as an image icon.
280                 </para>
281             </listitem>
282             <listitem>
283                 <para>
284                     Поля <code>Text</code> сохраняются, разбиваются на лексемы
285                     и индексируются. Текстовые поля подходят для хранения
286                     такой информации, как темы и заголовки — в них нужно не
287                     только искать, но и возвращать с результатами поиска.
288 <!--
289                     <code>Text</code> fields are stored, indexed, and tokenized.
290                     Text fields are appropriate for storing
291                     information like subjects and titles that need to be searchable
292                     as well as returned with search results.
294                 </para>
295             </listitem>
296             <listitem>
297                 <para>
298                     Поля <code>UnStored</code> разбиваются на лексемы и индексируются, но
299                     не сохраняются в индексе. Тексты большого объема лучше
300                     индексировать, используя этот тип поля.
301                     Хранение таких данных создает индекс, который занимает много места
302                     на диске, поэтому если нужно искать в данных, но не выводить их, то
303                     используйте поле UnStored. Поля UnStored полезны,
304                     когда используется индекс Zend_Search_Lucene в
305                     комбинации с реляционной БД. Вы можете индексировать большие
306                     поля данных для поиска с помощью UnStored и извлекать их
307                     из реляционной БД, используя отдельные поля как
308                     идентификаторы.
309 <!--
310                     <code>UnStored</code> fields are tokenized and indexed, but not stored in the index. Large amounts of
311                     text are best indexed using this type of field. Storing data creates a larger index on
312                     disk, so if you need to search but not redisplay the data, use an UnStored field.
313                     UnStored fields are practical when using a Zend_Search_Lucene index in
314                     combination with a relational database. You can index large data fields with UnStored
315                     fields for searching, and retrieve them from your relational database by using a separate
316                     fields as an identifier.
318                </para>
320                 <table>
321                     <title>Типы Zend_Search_Lucene_Field<!--Zend_Search_Lucene_Field Types--></title>
322                     <tgroup cols="5">
323                         <thead>
324                             <row>
325                                 <entry>Тип поля</entry>
326                                 <entry>Сохраняется</entry>
327                                 <entry>Индексируется</entry>
328                                 <entry>Разбивается на лексемы</entry>
329                                 <entry>Бинарное</entry>
330                             </row>
331                         </thead>
332                         <tbody>
333                             <row>
334                                 <entry>Keyword</entry>
335                                 <entry>Да</entry>
336                                 <entry>Да</entry>
337                                 <entry>Нет</entry>
338                                 <entry>Нет</entry>
339                             </row>
340                             <row>
341                                 <entry>UnIndexed</entry>
342                                 <entry>Да</entry>
343                                 <entry>Нет</entry>
344                                 <entry>Нет</entry>
345                                 <entry>Нет</entry>
346                             </row>
347                             <row>
348                                 <entry>Binary</entry>
349                                 <entry>Да</entry>
350                                 <entry>Нет</entry>
351                                 <entry>Нет</entry>
352                                 <entry>Да</entry>
353                             </row>
354                             <row>
355                                 <entry>Text</entry>
356                                 <entry>Да</entry>
357                                 <entry>Да</entry>
358                                 <entry>Да</entry>
359                                 <entry>Нет</entry>
360                             </row>
361                             <row>
362                                 <entry>UnStored</entry>
363                                 <entry>Нет</entry>
364                                 <entry>Да</entry>
365                                 <entry>Да</entry>
366                                 <entry>Нет</entry>
367                             </row>
368                         </tbody>
369                     </tgroup>
370                 </table>
371            </listitem>
372        </itemizedlist>
373     </sect2>
375     <sect2 id="zend.search.lucene.index-creation.html-documents">
376         <title>HTML-документы<!--HTML documents--></title>
377         <para>
378             Zend_Search_Lucene предоставляет возможность парсинга HTML.
379             Документы могут создаваться непосредственно из HTML-файла или
380             строки.
381 <!--
382             Zend_Search_Lucene offers HTML parsing feature. Documents can be
383             created directly from HTML file or string:
385             <programlisting language="php"><![CDATA[<?php
386 $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename);
387 $index->addDocument($doc);
389 $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
390 $index->addDocument($doc);
391 ?>]]></programlisting>
392         </para>
394         <para>
395             Класс <code>Zend_Search_Lucene_Document_Html</code> использует
396             методы <code>DOMDocument::loadHTML()</code> и
397             <code>DOMDocument::loadHTMLFile()</code> для парсинга исходного
398             HTML-кода, поэтому HTML не обязательно должен быть правильно
399             сформированным или быть XHTML. С другой стороны, он чувствителен к
400             кодировке, указанной в теге "meta http-equiv" заголовка.
401 <!--
402             <code>Zend_Search_Lucene_Document_Html</code> class uses
403             <code>DOMDocument::loadHTML()</code> and
404             <code>DOMDocument::loadHTMLFile()</code> methods to parse source
405             HTML, so it doesn't need HTML to be well formed or
406             to be XHTML. From the other side it's sensitive to encoding
407             mentioned in "meta http-equiv" header tag.
409         </para>
411         <para>
412             Класс <code>Zend_Search_Lucene_Document_Html</code> распознает
413             заголовок, тело документа и его мета-теги.
414 <!--
415             <code>Zend_Search_Lucene_Document_Html</code> class recognizes
416             document title, body and document header meta tags.
418         </para>
420         <para>
421             Поле 'title' будет содержать значение из /html/head/title. Оно
422             сохраняется в индексе, разбивается на лексемы и его содержимое
423             доступно для поиска.
424 <!--
425             'title' field is actually /html/head/title value. It's stored
426             within index, tokenized and available for search through.
428         </para>
430         <para>
431             Поле 'body' будет содержать тело документа. Оно не включает в себя
432             скрипты, комментарии и атрибуты тегов.
433 <!--
434             'body' field is actually body content. It doesn't include scripts,
435             comments and tags' attributes.
437         </para>
439         <para>
440             Методы <code>loadHTML()</code> и <code>loadHTMLFile()</code> класса
441             <code>Zend_Search_Lucene_Document_Html</code> также имеют второй
442             необязательный аргумент. Если он установлен в true, то содержимое
443             тела документа сохраняется в индексе и может быть получено из
444             индекса. По умолчанию тело документа разбивается на лексемы и
445             индексируется, но не сохраняется в индексе.
446 <!--
447             <code>loadHTML()</code> and <code>loadHTMLFile()</code> methods of
448             <code>Zend_Search_Lucene_Document_Html</code> class
449             also have second optional argument. If it's set to true, then body
450             content is also stored within index and can
451             be retrieved from index. Body is only tokenized and indexed, but
452             not stored by default.
454         </para>
456         <para>
457             К мета-тегам заголовка документа создаются дополнительные поля. При
458             этом имя поля берется из атрибута 'name', содержимое поля - из
459             атрибута 'content', это содержимое разбивается на лексемы,
460             индексируется и сохраняется в индексе, и, таким образом, документы
461             можно будет искать по их мета-тегам - например, по ключевым словам
462             (keywords).
463 <!--
464             Document header meta tags produce additional document fields.
465             Field name is taken from 'name' attribute,
466             'content' attribute gives field value, which is tokenized, indexed
467             and stored, so documents may be searched by their meta tags
468             (for example, by keywords).
470         </para>
472         <para>
473             К сгенерированным документам можно добавлять любые другие поля.
474 <!--
475             Parsed documents may be extended by user with any other field:
477             <programlisting language="php"><![CDATA[<?php
478 $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
479 $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
480                                                    time()));
481 $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
482                                                    time()));
483 $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
484                                               'Document annotation text'));
485 $index->addDocument($doc);
486 ?>]]></programlisting>
487         </para>
489         <para>
490             Линки из исходного документа не добавляются в генерируемый документ,
491             но могут быть получены через методы
492             <code>Zend_Search_Lucene_Document_Html::getLinks()</code> и
493             <code>Zend_Search_Lucene_Document_Html::getHeaderLinks()</code>:
494 <!--
495             Document links are not included into generated document, but may be
496             retrieved with
497             <code>Zend_Search_Lucene_Document_Html::getLinks()</code> and
498             <code>Zend_Search_Lucene_Document_Html::getHeaderLinks()</code>
499             methods:
501             <programlisting language="php"><![CDATA[<?php
502 $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
503 $linksArray = $doc->getLinks();
504 $headerLinksArray = $doc->getHeaderLinks();
505 ?>]]></programlisting>
506         </para>
507     </sect2>
509 </sect1>