[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ru / module_specs / Zend_Search_Lucene-QueryLanguage.xml
blobd60ca5057101a90d232798a21bf9ef866d56f8b4
1 <sect1 id="zend.search.lucene.query-language">
2     <title>Язык запросов<!--Query Language--></title>
4     <para>
5         Java Lucene и Zend_Search_Lucene предоставляют мощный язык запросов.
6 <!--
7         Java Lucene and Zend_Search_Lucene provide quite powerful query language.
8 -->
9     </para>
11     <para>
12         Он в основном один и тот же, но имеются некоторые различия, которые
13         будут описаны ниже.
14 <!--
15         It mostly the same, but has some diffirences, which are mentioned below.
16 -->
17     </para>
19     <para>
20         Полную документацию по синтаксису запросов для Java Lucene можно найти
21         <ulink url="http://lucene.apache.org/java/docs/queryparsersyntax.html">здесь</ulink>.
22 <!--
23         Full Java Lucene query language syntax documentation can be found
24         <ulink url="http://lucene.apache.org/java/docs/queryparsersyntax.html">here</ulink>.
25 -->
26     </para>
28     <sect2 id="zend.search.lucene.query-language.terms">
29         <title>Элементы<!--Terms--></title>
31         <para>
32             Запрос делится на элементы и операторы. Есть следующие типы
33             элементов: одиночный элемент, фразы и подзапросы.
34 <!--
35             A query is broken up into terms and operators. There are three types of terms: Single Terms, Phrases,
36             and Subqueries.
37 -->
38         </para>
39         <para>
40             Одиночный элемент – это одно слово, например: "test" или "hello".
41 <!--
42             A Single Term is a single word such as "test" or "hello".
43 -->
44         </para>
45         <para>
46             Фраза – это группа слов, окруженная двойными кавычками, например:
47             "hello dolly".
48 <!--
49             A Phrase is a group of words surrounded by double quotes such as "hello dolly".
50 -->
51         </para>
52         <para>
53             Подзапрос – это запрос, окруженный скобками, например: "(hello
54             dolly)".
55 <!--
56             A Subquery is a query surrounded by parentheses such as "(hello dolly)".
57 -->
58         </para>
59         <para>
60             Несколько элемнтов могут комбинироваться с булевыми операторами для
61             составления более сложных запросов (см. ниже).
63 <!--
64             Multiple terms can be combined together with Boolean operators to form a more complex query (see below).
65 -->
66         </para>
67     </sect2>
69     <sect2 id="zend.search.lucene.query-language.fields">
70         <title>Поля<!--Fields--></title>
72         <para>
73             Lucene поддерживает данные, хранящиеся в полях. Производя поиск,
74             можно указывать поля или использовать поле по умолчанию. Имена полей
75             зависят от проиндексированных данных, а используемое по умолчание
76             поле определяется через текущие настройки.
77 <!--
78             Lucene supports fielded data. When performing a search you can either specify a field, or use
79             the default field. The field names depend on indexed data and default field is defined
80             by current settings.
81 -->
82         </para>
83         <para>
84             Первым и важным отличием от Java Lucene является то, что
85             по умолчанию элементы ищутся <emphasis>по всем полям</emphasis>.
86 <!--
87             The first and major difference from Java Lucene is that terms are searched through
88             <emphasis>all fields</emphasis> by default.
89 -->
90         </para>
91         <para>
92             В классе Zend_Search_Lucene есть два статических метода, которые
93             позволяют работать с настройками:
94 <!--
95             There are two static methods in Zend_Search_Lucene class, which allow to operate with this settengs:
96 -->
97         </para>
98         <programlisting language="php"><![CDATA[<?php
99 $defaultSearchField = Zend_Search_Lucene::getDefaultSearchField();
101 Zend_Search_Lucene::setDefaultSearchField('contents');]]></programlisting>
103         <para>
104             Значение <constant>NULL</constant> означает, что поиск производится по всем
105             полям. Это значение настройки по умолчанию.
106 <!--
107             <constant>NULL</constant> value means, that search is performed through all field. It's a default setting.
109         </para>
110         <para>
111             Вы можете указать поле, набирая имя поля с двоеточием ":" в конце
112             и затем искомый элемент.
113 <!--
114             You can specify field by typing the field name followed by a colon ":" and then the term you
115             are looking for.
117         </para>
118         <para>
119             Для примера предположим, что индекс Lucene содержит два поля -
120             'title' (заголовок) и 'text' (текст), 'text' является полем,
121             используемым по умолчанию. Если вы хотите найти документ с
122             заголовком "The Right Way", который содержит текст "don't go
123             this way", то можете ввести:
124 <!--
125             As an example, let's assume a Lucene index contains two fields, title and text and text is the default field.
126             If you want to find the document entitled "The Right Way" which contains the text "don't go this way",
127             you can enter:
129         </para>
130         <programlisting language="querystring"><![CDATA[title:"The Right Way" AND text:go]]></programlisting>
131         <para>
132             или
133         </para>
134         <programlisting language="querystring"><![CDATA[title:"Do it right" AND go]]></programlisting>
135         <para>
136             Если 'text' является полем, используемым по умолчанию, то указание
137             поля не требуется.
138 <!--
139             If "text" is the default field, the field indicator is not required.
141         </para>
143         <para>
144             Важно: поле действительно только для того элемента, фразы или
145             подзапроса, перед которым он непосредственно стоит. Таким образом,
146             запрос
147 <!--
148             Note: The field is only valid for the term, phrase or subquery that it directly precedes,
149             so the query
151             <programlisting language="querystring"><![CDATA[title:Do it right]]></programlisting>
152             будет искать в поле 'title' только "Do". Поиск "it" и "right" будет
153             производиться в полях, используемых по умолчанию, если установлены
154             поля по умолчанию, или по всем полям, если вместо поля по умолчанию
155             установлено <constant>NULL</constant>.
156 <!--
157             Will only find "Do" in the title field. It will find "it" and "right" in the default field,
158             if default field is set, or in tha all indexed fields, if default field is set to <constant>NULL</constant>.
160         </para>
161     </sect2>
163     <sect2 id="zend.search.lucene.query-language.modifiers">
164         <title>Модификаторы элементов<!--Term Modifiers--></title>
166         <para>
167             Lucene поддерживает модификацию элементов запроса для предоставления
168             широкого диапазона опций поиска.
169 <!--
170             Lucene supports modifying query terms to provide a wide range of searching options.
172         </para>
173         <para>
174             Zend_Search_Lucene сейчас поддерживает модификатор "~" только для
175             фраз
176 <!--
177             Zend_Search_Lucene supports "~" modifier only for phrases now
179             <footnote>
180                 <para>
181                     "~" по отношению к элементам используется для нечеткого
182                     поиска, но запросы для нечеткого поиска еще не
183                     поддерживаются.
184 <!--
185                     "~" for terms is used for fuzzy search, but fuzzy search queries are not supported yet.
187                 </para>
188             </footnote>.
189         </para>
190     </sect2>
192     <sect2 id="zend.search.lucene.query-language.proximity-search">
193         <title>Поиск по критерию близости<!--Proximity Searches--></title>
195         <para>
196             Lucene поддерживает поиск слов, находящихся в пределах определенного
197             расстояния друг от друга. Для того, чтобы производить поиск по
198             критерию близости, используйте тильду "~" в конце фразы. Например,
199             для того, чтобы найти в документе "Zend" и "Framework" в пределах
200             10 слов, используйте следующий запрос:
201 <!--
202             Lucene supports finding words are a within a specific distance away. To do a proximity search
203             use the tilde, "~", symbol at the end of a Phrase. For example to search for a "Zend" and
204             "Framework" within 10 words of each other in a document use the search:
206             <programlisting language="querystring"><![CDATA["Zend Framework"~10]]></programlisting>
207         </para>
208     </sect2>
210     <sect2 id="zend.search.lucene.query-language.boosting">
211         <title>Усиление элемента<!--Boosting a Term--></title>
213         <para>
214             Java Lucene и Zend_Search_Lucene предоставляют уровень релевантности
215             соответствующих запросу документов, основыванный на количестве
216             найденных элементов. Для того, чтобы усилить элемент, используйте
217             знак вставки "^" с коэффициентом усиления после этого элемента. Чем
218             больше коэффициент усиления, то тем более релевантным будет элемент.
219 <!--
220             Java Lucene and Zend_Search_Lucene provide the relevance level of matching documents based
221             on the terms found. To boost a term use the caret, "^", symbol with a boost factor (a number)
222             at the end of the term you are searching. The higher the boost factor, the more relevant
223             the term will be.
225         </para>
226         <para>
227             Усиление элементов позволяет управлять релевантностью документа.
228             Например, если вы ищете
229 <!--
230             Boosting allows you to control the relevance of a document by boosting its term. For example,
231             if you are searching for
233             <programlisting language="querystring"><![CDATA[PHP framework]]></programlisting>
234             и хотите, чтобы элемент 'PHP' был более релевантным, то усильте
235             его, используя символ ^ с коэффициентом усиления после этого
236             элемента:
237 <!--
238             and you want the term "PHP" to be more relevant boost it using the ^ symbol along with the
239             boost factor next to the term. You would type:
241             <programlisting language="querystring"><![CDATA[PHP^4 framework]]></programlisting>
242             Это сделает более релевантными те документы, в которых встречается
243             элемент 'PHP'. Вы можете также усиливать фразы и подзапросы, как в
244             примере ниже:
246 <!--
247             This will make documents with the term PHP appear more relevant. You can also boost Phrase
248             Terms  and subqueries as in the example:
250             <programlisting language="querystring"><![CDATA["PHP framework"^4 "Zend Framework"]]></programlisting>
251             По умолчанию коэффициент усиления равен 1. Несмотря на то, что
252             коэффициент усиления должен быть положительным числом, он может быть
253             меньше 1 (например, 0.2).
254 <!--
255             By default, the boost factor is 1. Although the boost factor must be positive,
256             it can be less than 1 (e.g. 0.2)
258         </para>
259     </sect2>
261     <sect2 id="zend.search.lucene.query-language.boolean">
262         <title>Булевы операторы<!--Boolean Operators--></title>
264         <para>
265             Булевы операторы позволяют комбинировать элементы через логические
266             операторы. Lucene поддерживает AND, "+", OR, NOT и "-" как булевы
267             операторы. Java Lucene требует, чтобы все булевы операторы были в
268             верхнем регистре, Zend_Search_Lucene этого не требует.
269 <!--
270             Boolean operators allow terms to be combined through logic operators.
271             Lucene supports AND, "+", OR, NOT and "-" as Boolean operators.
272             Java Lucene needs boolean operators t obe ALL CAPS. Zend_Search_Lucene doesn't.
274         </para>
276         <para>
277             Операторы AND, OR, NOT и "+", "-" определяют два различных стиля
278             построения запросов. В отличие от Java Lucene, Zend_Search_Lucene не
279             позволяет смешивать оба стиля.
280 <!--
281             AND, OR, and NOT operators and "+", "-" defines two styles to construct boolean queries.
282             As opposed to Java Lucene Zend_Search_Lucene doesn't allow to mix these two styles.
284         </para>
285         <para>
286             Если используется стиль AND/OR/NOT, то операторы AND/OR должны
287             находиться между всеми элементами запроса. Перед любым элементом
288             может также находиться оператор NOT. Оператор AND имеет более
289             высокий приоритет, чем OR. Этим Zend_Search_Lucene отличается от
290             Java Lucene.
291 <!--
292             If AND/OR/NOT style is used, then AND/OR operator must be present between all query terms.
293             Each term may also be preceded by NOT operator. AND operator has higher precedence than OR.
294             It differs from Java Lucene behavior.
296         </para>
298         <sect3 id="zend.search.lucene.query-language.boolean.and">
299             <title>AND</title>
300             <para>
301                 Оператор AND означает, что документ должен соответствовать всем
302                 элементам в "группе AND".
303 <!--
304                 The AND operator means, that all terms in "AND group" must match document.
306             </para>
307             <para>
308                 Для поиск документов, содержащих "PHP framework" м "Zend
309                 Framework" используется запрос:
310 <!--
311                 To search for documents that contain "PHP framework" and "Zend Framework" use the query:
313                 <programlisting language="querystring"><![CDATA["PHP framework" AND "Zend Framework"]]></programlisting>
314             </para>
315         </sect3>
317         <sect3 id="zend.search.lucene.query-language.boolean.or">
318             <title>OR</title>
319             <para>
320                 Оператор OR делит запрос на несколько необязательных частей.
321 <!--
322                 The OR operator devides query into several optional parts.
324             </para>
325             <para>
326                 Для поиска документов, содержащих "PHP framework" или "Zend
327                 Framework" используется запрос:
328 <!--
329                 To search for documents that contain "PHP framework" or "Zend Framework" use the query:
331                 <programlisting language="querystring"><![CDATA["PHP framework" OR "Zend Framework"]]></programlisting>
332             </para>
333         </sect3>
335         <sect3 id="zend.search.lucene.query-language.boolean.not">
336             <title>NOT</title>
337             <para>
338                 Оператор NOT исключает документы, содержащие элемент после NOT.
339                 Но "группа AND", содержащая только элементы с оператором NOT,
340                 даст пустой результат вместо всего набора проиндексированных
341                 документов.
342 <!--
343                 The NOT operator excludes documents that contain the term after NOT. But "AND group", which contains
344                 only terms with NOT operator, gives empty result instead of full set indexed documents.
346             </para>
347             <para>
348                 Для поиска документов, содержащих "PHP framework", но без "Zend
349                 Framework", используется запрос:
350 <!--
351                 To search for documents that contain "PHP framework" but not "Zend Framework" use the query:
353                 <programlisting language="querystring"><![CDATA["PHP framework" AND NOT "Zend Framework"]]></programlisting>
354             </para>
355         </sect3>
357         <sect3 id="zend.search.lucene.query-language.boolean.other-form">
358             <title>Операторы &amp;&amp;, ||, и !<!--&amp;&amp;, ||, and ! operators--></title>
359             <para>
360                 Операторы &amp;&amp;, ||, и ! могут использоваться вместо AND,
361                 OR и NOT.
362 <!--
363                 &amp;&amp;, ||, and ! may be used instead of AND, OR, and NOT operators.
365             </para>
366         </sect3>
368         <sect3 id="zend.search.lucene.query-language.boolean.plus">
369             <title>+</title>
370             <para>
371                 "+" означает, что документ должен соответствовать элементу,
372                 находящемуся после "+".
373 <!--
374                 The "+" or required operator requires that the term after the "+" symbol must match the document.
376             </para>
377             <para>
378                 Для поиска документов, которые должны содержать "Zend" и могут
379                 содержать "Framework", используется запрос:
380 <!--
381                 To search for documents that must contain "Zend" and may contain "Framework" use the query:
383                 <programlisting language="querystring"><![CDATA[+Zend Framework]]></programlisting>
384             </para>
385         </sect3>
387         <sect3 id="zend.search.lucene.query-language.boolean.minus">
388             <title>-</title>
389             <para>
390                 "-" исключает документы, соответствующие элементу находящемуся
391                 после него.
392 <!--
393                 The "-" or prohibit operator excludes documents that matches the term after the "-" symbol.
395             </para>
396             <para>
397                 Для поиска документов, содержащих "PHP framework",
398                 но без "Zend Framework", используется запрос:
399 <!--
400                 To search for documents that contain "PHP framework" but not "Zend Framework" use the query:
402                 <programlisting language="querystring"><![CDATA["PHP framework" -"Zend Framework"]]></programlisting>
403             </para>
404         </sect3>
406         <sect3 id="zend.search.lucene.query-language.boolean.no-operator">
407             <title>Отсутствие оператора<!--no operator--></title>
408             <para>
409                 Если не не указан оператор, то поведение определяется
410                 используемым по умолчанию булевым оператором.
411 <!--
412                 If no operator is used, then behavior is defined by "default boolean operator".
414             </para>
416             <para>
417                 По умолчанию таким оператором является <code>OR</code>.
418 <!--
419                 It's <code>OR</code> by default.
421             </para>
423             <para>
424                 Это означает, что данный элемент является необязательным. Он
425                 может как присутствовать, так и не присутствовать в документе,
426                 но документы с этим элементом имеют более высокий ранг.
427 <!--
428                 That means, that term is optional. It may be or may not be presented within document, but documents with this term
429                 will have higher score.
431             </para>
433             <para>
434                 Для поиска документов, которые должны содержать "PHP framework"
435                 и могут содержать "Zend Framework", используется запрос:
436 <!--
437                 To search for documents that requires "PHP framework" and may contain "Zend Framework" use the query:
439                 <programlisting language="querystring"><![CDATA[+"PHP framework" "Zend Framework"]]></programlisting>
440             </para>
442             <para>
443                 Используемые по умолчанию булевы операторы могут быть
444                 установлены или получены с помощью методов
445                 <code>Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)</code>
446                 и <code>Zend_Search_Lucene_Search_QueryParser::getDefaultOperator()</code>.
447 <!--
448                 Default boolean operator may be set or retrieved with
449                 <code>Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)</code> and
450                 <code>Zend_Search_Lucene_Search_QueryParser::getDefaultOperator()</code> methods.
452             </para>
453             <para>
454                 Эти методы работают с константами <code>Zend_Search_Lucene_Search_QueryParser::B_AND</code> и <code>Zend_Search_Lucene_Search_QueryParser::B_OR</code>.
455 <!--
456                 These methods operate with
457                 <code>Zend_Search_Lucene_Search_QueryParser::B_AND</code> and
458                 <code>Zend_Search_Lucene_Search_QueryParser::B_OR</code> constants.
460             </para>
462         </sect3>
463     </sect2>
465     <sect2 id="zend.search.lucene.query-language.grouping">
466         <title>Групирование<!--Grouping--></title>
468         <para>
469             Java Lucene и Zend_Search_Lucene поддерживают использование
470             скобок для группирования условий в подзапросы. Это может быть
471             полезным, если вы хотите контролировать булеву логику для запросов
472             или смешивать различные стили запросов:
473 <!--
474             Java Lucene and Zend_Search_Lucene support using parentheses to group clauses to form sub queries. This can be
475             useful if you want to control the boolean logic for a query or mix different boolean query styles:
477             <programlisting language="querystring"><![CDATA[+(framework OR library) +php]]></programlisting>
478             Zend_Search_Lucene поддердивает подзапросы на любой уровни
479             вложенности.
480 <!--
481             Zend_Search_Lucene supports subqueries of any level.
483         </para>
484     </sect2>
486     <sect2 id="zend.search.lucene.query-language.field-grouping">
487         <title>Группирование полей<!--Field Grouping--></title>
489         <para>
490             Lucene поддерживает использование скобок для группирования
491             нескольких условий применительно к одному полю.
492 <!--
493             Lucene supports using parentheses to group multiple clauses to a single field.
495         </para>
496         <para>
497             Для поиска заголовка, содержащего слово "return" и фразу "pink
498             panther" используйте запрос:
499 <!--
500             To search for a title that contains both the word "return" and the phrase "pink panther" use the query:
502             <programlisting language="querystring"><![CDATA[title:(+return +"pink panther")]]></programlisting>
503             Zend_Search_Lucene поддердивает подзапросы любого уровня
504             вложенности.
505 <!--
506             Zend_Search_Lucene supports subqueries of any level.
508         </para>
509     </sect2>
511     <sect2 id="zend.search.lucene.query-language.escaping">
512         <title>Экранирование специальных символов<!--Escaping Special Characters--></title>
514         <para>
515             Lucene поддерживает экранирование тех специальных символов, которые
516             являются частью синтаксиса запросов. Список специальных символов:
517 <!--
518             Lucene supports escaping special characters that are part of the query syntax. The current list special
519             characters are:
521         </para>
522         <para>
523             + - &amp;&amp; || ! ( ) { } [ ] ^ " ~ * ? : \
524         </para>
525         <para>
526             + и - внутри элемента обрабатываются как обычные символы.
527 <!--
528             + and - inside single terms are treated as common characters.
530         </para>
531         <para>
532             Для того, чтобы экранировать эти символы, используйте \ перед
533             символом. Например, для поиска (1+1):2 используйте запрос:
534 <!--
535             To escape these character use the \ before the character. For example to search for (1+1):2 use the query:
537             <programlisting language="querystring"><![CDATA[\(1\+1\)\:2]]></programlisting>
538         </para>
539     </sect2>
541 </sect1>