Язык запросовJava Lucene и Zend_Search_Lucene предоставляют мощный язык запросов. Он в основном один и тот же, но имеются некоторые различия, которые будут описаны ниже.
Полную документацию по синтаксису запросов для Java Lucene можно найти
ЭлементыЗапрос делится на элементы и операторы. Есть следующие типы элементов: одиночный элемент, фразы и подзапросы. Одиночный элемент – это одно слово, например: "test" или "hello". Фраза – это группа слов, окруженная двойными кавычками, например: "hello dolly". Подзапрос – это запрос, окруженный скобками, например: "(hello dolly)". Несколько элемнтов могут комбинироваться с булевыми операторами для составления более сложных запросов (см. ниже). ПоляLucene поддерживает данные, хранящиеся в полях. Производя поиск, можно указывать поля или использовать поле по умолчанию. Имена полей зависят от проиндексированных данных, а используемое по умолчание поле определяется через текущие настройки. Первым и важным отличием от Java Lucene является то, что по умолчанию элементы ищутся по всем полям. В классе Zend_Search_Lucene есть два статических метода, которые позволяют работать с настройками:
Значение NULL означает, что поиск производится по всем полям. Это значение настройки по умолчанию. Вы можете указать поле, набирая имя поля с двоеточием ":" в конце и затем искомый элемент. Для примера предположим, что индекс Lucene содержит два поля - 'title' (заголовок) и 'text' (текст), 'text' является полем, используемым по умолчанию. Если вы хотите найти документ с заголовком "The Right Way", который содержит текст "don't go this way", то можете ввести:
или
Если 'text' является полем, используемым по умолчанию, то указание поля не требуется. Важно: поле действительно только для того элемента, фразы или подзапроса, перед которым он непосредственно стоит. Таким образом, запрос
Модификаторы элементовLucene поддерживает модификацию элементов запроса для предоставления широкого диапазона опций поиска. Zend_Search_Lucene сейчас поддерживает модификатор "~" только для фраз [1] . Поиск по критерию близостиLucene поддерживает поиск слов, находящихся в пределах определенного расстояния друг от друга. Для того, чтобы производить поиск по критерию близости, используйте тильду "~" в конце фразы. Например, для того, чтобы найти в документе "Zend" и "Framework" в пределах 10 слов, используйте следующий запрос:
Усиление элементаJava Lucene и Zend_Search_Lucene предоставляют уровень релевантности соответствующих запросу документов, основыванный на количестве найденных элементов. Для того, чтобы усилить элемент, используйте знак вставки "^" с коэффициентом усиления после этого элемента. Чем больше коэффициент усиления, то тем более релевантным будет элемент. Усиление элементов позволяет управлять релевантностью документа. Например, если вы ищете
Булевы операторыБулевы операторы позволяют комбинировать элементы через логические операторы. Lucene поддерживает AND, "+", OR, NOT и "-" как булевы операторы. Java Lucene требует, чтобы все булевы операторы были в верхнем регистре, Zend_Search_Lucene этого не требует. Операторы AND, OR, NOT и "+", "-" определяют два различных стиля построения запросов. В отличие от Java Lucene, Zend_Search_Lucene не позволяет смешивать оба стиля. Если используется стиль AND/OR/NOT, то операторы AND/OR должны находиться между всеми элементами запроса. Перед любым элементом может также находиться оператор NOT. Оператор AND имеет более высокий приоритет, чем OR. Этим Zend_Search_Lucene отличается от Java Lucene. ANDОператор AND означает, что документ должен соответствовать всем элементам в "группе AND". Для поиск документов, содержащих "PHP framework" м "Zend Framework" используется запрос:
ORОператор OR делит запрос на несколько необязательных частей. Для поиска документов, содержащих "PHP framework" или "Zend Framework" используется запрос:
NOTОператор NOT исключает документы, содержащие элемент после NOT. Но "группа AND", содержащая только элементы с оператором NOT, даст пустой результат вместо всего набора проиндексированных документов. Для поиска документов, содержащих "PHP framework", но без "Zend Framework", используется запрос:
Операторы &&, ||, и !Операторы &&, ||, и ! могут использоваться вместо AND, OR и NOT. +"+" означает, что документ должен соответствовать элементу, находящемуся после "+". Для поиска документов, которые должны содержать "Zend" и могут содержать "Framework", используется запрос:
-"-" исключает документы, соответствующие элементу находящемуся после него. Для поиска документов, содержащих "PHP framework", но без "Zend Framework", используется запрос:
Отсутствие оператораЕсли не не указан оператор, то поведение определяется используемым по умолчанию булевым оператором.
По умолчанию таким оператором является Это означает, что данный элемент является необязательным. Он может как присутствовать, так и не присутствовать в документе, но документы с этим элементом имеют более высокий ранг. Для поиска документов, которые должны содержать "PHP framework" и могут содержать "Zend Framework", используется запрос:
Используемые по умолчанию булевы операторы могут быть
установлены или получены с помощью методов
Эти методы работают с константами ГрупированиеJava Lucene и Zend_Search_Lucene поддерживают использование скобок для группирования условий в подзапросы. Это может быть полезным, если вы хотите контролировать булеву логику для запросов или смешивать различные стили запросов:
Группирование полейLucene поддерживает использование скобок для группирования нескольких условий применительно к одному полю. Для поиска заголовка, содержащего слово "return" и фразу "pink panther" используйте запрос:
Экранирование специальных символовLucene поддерживает экранирование тех специальных символов, которые являются частью синтаксиса запросов. Список специальных символов: + - && || ! ( ) { } [ ] ^ " ~ * ? : \ + и - внутри элемента обрабатываются как обычные символы. Для того, чтобы экранировать эти символы, используйте \ перед символом. Например, для поиска (1+1):2 используйте запрос:
[1]
"~" по отношению к элементам используется для нечеткого
поиска, но запросы для нечеткого поиска еще не
поддерживаются.
|
|