1 <sect1 id="zend.search.lucene.query-language">
2 <title>Язык запросов<!--Query Language--></title>
5 Java Lucene и Zend_Search_Lucene предоставляют мощный язык запросов.
7 Java Lucene and Zend_Search_Lucene provide quite powerful query language.
12 Он в основном один и тот же, но имеются некоторые различия, которые
15 It mostly the same, but has some diffirences, which are mentioned below.
20 Полную документацию по синтаксису запросов для Java Lucene можно найти
21 <ulink url="http://lucene.apache.org/java/docs/queryparsersyntax.html">здесь</ulink>.
23 Full Java Lucene query language syntax documentation can be found
24 <ulink url="http://lucene.apache.org/java/docs/queryparsersyntax.html">here</ulink>.
28 <sect2 id="zend.search.lucene.query-language.terms">
29 <title>Элементы<!--Terms--></title>
32 Запрос делится на элементы и операторы. Есть следующие типы
33 элементов: одиночный элемент, фразы и подзапросы.
35 A query is broken up into terms and operators. There are three types of terms: Single Terms, Phrases,
40 Одиночный элемент – это одно слово, например: "test" или "hello".
42 A Single Term is a single word such as "test" or "hello".
46 Фраза – это группа слов, окруженная двойными кавычками, например:
49 A Phrase is a group of words surrounded by double quotes such as "hello dolly".
53 Подзапрос – это запрос, окруженный скобками, например: "(hello
56 A Subquery is a query surrounded by parentheses such as "(hello dolly)".
60 Несколько элемнтов могут комбинироваться с булевыми операторами для
61 составления более сложных запросов (см. ниже).
64 Multiple terms can be combined together with Boolean operators to form a more complex query (see below).
69 <sect2 id="zend.search.lucene.query-language.fields">
70 <title>Поля<!--Fields--></title>
73 Lucene поддерживает данные, хранящиеся в полях. Производя поиск,
74 можно указывать поля или использовать поле по умолчанию. Имена полей
75 зависят от проиндексированных данных, а используемое по умолчание
76 поле определяется через текущие настройки.
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
84 Первым и важным отличием от Java Lucene является то, что
85 по умолчанию элементы ищутся <emphasis>по всем полям</emphasis>.
87 The first and major difference from Java Lucene is that terms are searched through
88 <emphasis>all fields</emphasis> by default.
92 В классе Zend_Search_Lucene есть два статических метода, которые
93 позволяют работать с настройками:
95 There are two static methods in Zend_Search_Lucene class, which allow to operate with this settengs:
98 <programlisting language="php"><![CDATA[<?php
99 $defaultSearchField = Zend_Search_Lucene::getDefaultSearchField();
101 Zend_Search_Lucene::setDefaultSearchField('contents');]]></programlisting>
104 Значение <constant>NULL</constant> означает, что поиск производится по всем
105 полям. Это значение настройки по умолчанию.
107 <constant>NULL</constant> value means, that search is performed through all field. It's a default setting.
111 Вы можете указать поле, набирая имя поля с двоеточием ":" в конце
112 и затем искомый элемент.
114 You can specify field by typing the field name followed by a colon ":" and then the term you
119 Для примера предположим, что индекс Lucene содержит два поля -
120 'title' (заголовок) и 'text' (текст), 'text' является полем,
121 используемым по умолчанию. Если вы хотите найти документ с
122 заголовком "The Right Way", который содержит текст "don't go
123 this way", то можете ввести:
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",
130 <programlisting language="querystring"><![CDATA[title:"The Right Way" AND text:go]]></programlisting>
134 <programlisting language="querystring"><![CDATA[title:"Do it right" AND go]]></programlisting>
136 Если 'text' является полем, используемым по умолчанию, то указание
139 If "text" is the default field, the field indicator is not required.
144 Важно: поле действительно только для того элемента, фразы или
145 подзапроса, перед которым он непосредственно стоит. Таким образом,
148 Note: The field is only valid for the term, phrase or subquery that it directly precedes,
151 <programlisting language="querystring"><![CDATA[title:Do it right]]></programlisting>
152 будет искать в поле 'title' только "Do". Поиск "it" и "right" будет
153 производиться в полях, используемых по умолчанию, если установлены
154 поля по умолчанию, или по всем полям, если вместо поля по умолчанию
155 установлено <constant>NULL</constant>.
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>.
163 <sect2 id="zend.search.lucene.query-language.modifiers">
164 <title>Модификаторы элементов<!--Term Modifiers--></title>
167 Lucene поддерживает модификацию элементов запроса для предоставления
168 широкого диапазона опций поиска.
170 Lucene supports modifying query terms to provide a wide range of searching options.
174 Zend_Search_Lucene сейчас поддерживает модификатор "~" только для
177 Zend_Search_Lucene supports "~" modifier only for phrases now
181 "~" по отношению к элементам используется для нечеткого
182 поиска, но запросы для нечеткого поиска еще не
185 "~" for terms is used for fuzzy search, but fuzzy search queries are not supported yet.
192 <sect2 id="zend.search.lucene.query-language.proximity-search">
193 <title>Поиск по критерию близости<!--Proximity Searches--></title>
196 Lucene поддерживает поиск слов, находящихся в пределах определенного
197 расстояния друг от друга. Для того, чтобы производить поиск по
198 критерию близости, используйте тильду "~" в конце фразы. Например,
199 для того, чтобы найти в документе "Zend" и "Framework" в пределах
200 10 слов, используйте следующий запрос:
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>
210 <sect2 id="zend.search.lucene.query-language.boosting">
211 <title>Усиление элемента<!--Boosting a Term--></title>
214 Java Lucene и Zend_Search_Lucene предоставляют уровень релевантности
215 соответствующих запросу документов, основыванный на количестве
216 найденных элементов. Для того, чтобы усилить элемент, используйте
217 знак вставки "^" с коэффициентом усиления после этого элемента. Чем
218 больше коэффициент усиления, то тем более релевантным будет элемент.
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
227 Усиление элементов позволяет управлять релевантностью документа.
228 Например, если вы ищете
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 его, используя символ ^ с коэффициентом усиления после этого
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'. Вы можете также усиливать фразы и подзапросы, как в
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).
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)
261 <sect2 id="zend.search.lucene.query-language.boolean">
262 <title>Булевы операторы<!--Boolean Operators--></title>
265 Булевы операторы позволяют комбинировать элементы через логические
266 операторы. Lucene поддерживает AND, "+", OR, NOT и "-" как булевы
267 операторы. Java Lucene требует, чтобы все булевы операторы были в
268 верхнем регистре, Zend_Search_Lucene этого не требует.
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.
277 Операторы AND, OR, NOT и "+", "-" определяют два различных стиля
278 построения запросов. В отличие от Java Lucene, Zend_Search_Lucene не
279 позволяет смешивать оба стиля.
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.
286 Если используется стиль AND/OR/NOT, то операторы AND/OR должны
287 находиться между всеми элементами запроса. Перед любым элементом
288 может также находиться оператор NOT. Оператор AND имеет более
289 высокий приоритет, чем OR. Этим Zend_Search_Lucene отличается от
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.
298 <sect3 id="zend.search.lucene.query-language.boolean.and">
301 Оператор AND означает, что документ должен соответствовать всем
302 элементам в "группе AND".
304 The AND operator means, that all terms in "AND group" must match document.
308 Для поиск документов, содержащих "PHP framework" м "Zend
309 Framework" используется запрос:
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>
317 <sect3 id="zend.search.lucene.query-language.boolean.or">
320 Оператор OR делит запрос на несколько необязательных частей.
322 The OR operator devides query into several optional parts.
326 Для поиска документов, содержащих "PHP framework" или "Zend
327 Framework" используется запрос:
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>
335 <sect3 id="zend.search.lucene.query-language.boolean.not">
338 Оператор NOT исключает документы, содержащие элемент после NOT.
339 Но "группа AND", содержащая только элементы с оператором NOT,
340 даст пустой результат вместо всего набора проиндексированных
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.
348 Для поиска документов, содержащих "PHP framework", но без "Zend
349 Framework", используется запрос:
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>
357 <sect3 id="zend.search.lucene.query-language.boolean.other-form">
358 <title>Операторы &&, ||, и !<!--&&, ||, and ! operators--></title>
360 Операторы &&, ||, и ! могут использоваться вместо AND,
363 &&, ||, and ! may be used instead of AND, OR, and NOT operators.
368 <sect3 id="zend.search.lucene.query-language.boolean.plus">
371 "+" означает, что документ должен соответствовать элементу,
372 находящемуся после "+".
374 The "+" or required operator requires that the term after the "+" symbol must match the document.
378 Для поиска документов, которые должны содержать "Zend" и могут
379 содержать "Framework", используется запрос:
381 To search for documents that must contain "Zend" and may contain "Framework" use the query:
383 <programlisting language="querystring"><![CDATA[+Zend Framework]]></programlisting>
387 <sect3 id="zend.search.lucene.query-language.boolean.minus">
390 "-" исключает документы, соответствующие элементу находящемуся
393 The "-" or prohibit operator excludes documents that matches the term after the "-" symbol.
397 Для поиска документов, содержащих "PHP framework",
398 но без "Zend Framework", используется запрос:
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>
406 <sect3 id="zend.search.lucene.query-language.boolean.no-operator">
407 <title>Отсутствие оператора<!--no operator--></title>
409 Если не не указан оператор, то поведение определяется
410 используемым по умолчанию булевым оператором.
412 If no operator is used, then behavior is defined by "default boolean operator".
417 По умолчанию таким оператором является <code>OR</code>.
419 It's <code>OR</code> by default.
424 Это означает, что данный элемент является необязательным. Он
425 может как присутствовать, так и не присутствовать в документе,
426 но документы с этим элементом имеют более высокий ранг.
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.
434 Для поиска документов, которые должны содержать "PHP framework"
435 и могут содержать "Zend Framework", используется запрос:
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>
443 Используемые по умолчанию булевы операторы могут быть
444 установлены или получены с помощью методов
445 <code>Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)</code>
446 и <code>Zend_Search_Lucene_Search_QueryParser::getDefaultOperator()</code>.
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.
454 Эти методы работают с константами <code>Zend_Search_Lucene_Search_QueryParser::B_AND</code> и <code>Zend_Search_Lucene_Search_QueryParser::B_OR</code>.
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.
465 <sect2 id="zend.search.lucene.query-language.grouping">
466 <title>Групирование<!--Grouping--></title>
469 Java Lucene и Zend_Search_Lucene поддерживают использование
470 скобок для группирования условий в подзапросы. Это может быть
471 полезным, если вы хотите контролировать булеву логику для запросов
472 или смешивать различные стили запросов:
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 поддердивает подзапросы на любой уровни
481 Zend_Search_Lucene supports subqueries of any level.
486 <sect2 id="zend.search.lucene.query-language.field-grouping">
487 <title>Группирование полей<!--Field Grouping--></title>
490 Lucene поддерживает использование скобок для группирования
491 нескольких условий применительно к одному полю.
493 Lucene supports using parentheses to group multiple clauses to a single field.
497 Для поиска заголовка, содержащего слово "return" и фразу "pink
498 panther" используйте запрос:
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 поддердивает подзапросы любого уровня
506 Zend_Search_Lucene supports subqueries of any level.
511 <sect2 id="zend.search.lucene.query-language.escaping">
512 <title>Экранирование специальных символов<!--Escaping Special Characters--></title>
515 Lucene поддерживает экранирование тех специальных символов, которые
516 являются частью синтаксиса запросов. Список специальных символов:
518 Lucene supports escaping special characters that are part of the query syntax. The current list special
523 + - && || ! ( ) { } [ ] ^ " ~ * ? : \
526 + и - внутри элемента обрабатываются как обычные символы.
528 + and - inside single terms are treated as common characters.
532 Для того, чтобы экранировать эти символы, используйте \ перед
533 символом. Например, для поиска (1+1):2 используйте запрос:
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>