API для построения запросовВ дополнение к автоматическому парсингу запросов есть возможность строить запросы через API. Пользовательские запросы могут быть объединены с запросами, созданными через API. Используйте парсер запросов для построения запроса из строки.
Исключения, бросаемые парсером запросовПарсер запросов может генерировать два типа исключений:
Тот же самый подход может (и должен) применяться для метода find() объекта Zend_Search_Lucene. Простой запрос (запрос по одному ключевому слову)Простые запросы предназначены для поиска по одному элементу. Строка запроса:
или Построение запроса через API:
Параметр, задающий поле для поиска ('field1'), является опциональным. Zend_Search_Lucene производит поиск по всем полям, если поля для поиска не заданы.
Составной запрос (запрос по нескольким ключевым словам)Составные запросы предназначены для поиска по набору элементов. Каждый элемент в наборе может быть определен как "обязательный", "необязательный" или "запрещенный".
Это значит, что если необязательные элементы добавлены в запрос с обязательными, то они будут иметь одинаковый набор результатов, но в случае второго запроса хиты, соответствующие необязательным элементам, будут перемещены в верх списка результатов запроса. Для составных запросов могут использоваться оба метода поиска. Запрос в виде строки:
или Построение запроса через программный интерфейс:
Массив $signs содержит информацию о типах элементов:
Фразовый запросФразовые запросы предназначены для поиска по фразам. Фразовые запросы являются очень гибкими и позволяют искать как точные фразы, так и неточные. Фразы могут содержать пропуски или несколько слов в одной и той же позиции. (Это может быть сгенерировано анализатором для различных целей. Например, элементы могут повторяться для повышения "веса" или в одной позиции могут быть размещены несколько синонимов). В соответствии с этим фразовые запросы могут строиться только через программный интерфейс:
Фразовый запрос может строиться сразу с помощью конструктора класса
или пошагово с помощью метода
Конструктор класса $terms является массивом строк, который содержит набор элементов фразы. Если он опущен или равен NULL, то строится пустой запрос.
$offsets является массивом целочисленных значений,
который содержит смещения элементов во фразе. Если он опущен или равен
NULL, то позиции элементов предполагаются как
$field является строкой, которая указывает поле документа, в котором производится поиск. Если он опущен или равен NULL, то поиск производится в поле по умолчанию. Данная версия Zend_Search_Lucene трактует поле 'contents' как поле, выбираемое по умолчанию, но в следующих версиях планируется добавить возможность указания любого поля, как выбираемого по умолчанию. Таким образом:
будет искать фразу 'zend framework'. будет искать фразу 'zend ????? download', такой запрос соответствует фразам 'zend platform download', 'zend studio download', 'zend core download', 'zend framework download' и т.д.
будет искать фразу 'zend framework' в поле 'title'.
Метод
$term описывает следующий элемент во фразе. Он должен указывать на то же самое поле, что и предыдущие элементы, иначе будет сгенерировано исключение. $position указывает позицию элемента.
будет искать фразу 'zend framework'.
будет искать фразу 'zend ????? download', такой запрос соответствует фразам 'zend platform download', 'zend studio download', 'zend core download', 'zend framework download' и т.д.
будет искать фразу 'zend framework' в поле 'title'. Коэффициент расстояния устанавливает допустимое количество других слов, находящихся между словами во фразе запроса. Если он равен нулю, то ищется точная фраза. При бОльших значениях это будет работать как оператор WITHIN или NEAR По сути, это управляемое расстояние, где единицы соответствуют перемене мест элементов относительно их позиции во фразе поиска. Например, для переключения порядка двух слов требуются две перемены мест (первое перемещение помещает слова друг над другом). Поэтому для того, чтобы разрешить изменение порядка фраз, коэффициент расстояния должен быть равен, как минимум, двум. Более точные соответствия имеют бОльшую релевантность, чем менее точные, таким образом, результаты сортируются по точности. По умолчанию коэффициент расстояния равен нулю, что означает точное соответствие. Коэффициент расстояния может быть указан после создания запроса:
|
|