Поиск по индексуПостроение запросовПроизводить поиск по индексу можно двумя способами. Первый способ использует парсер запросов для построения запросов из строки. Второй способ дает возможность создавать свои запросы через программный интерфейс Zend_Search_Lucene. В случае выбора парсера запросов учтите следующее:
Оба способа используют один и тот же метод программного интерфейса для поиска в индексе:
Метод Важно отметить, что парсер запросов использует стандартный анализатор для разбиения на лексемы отдельных частей строки запроса. Таким образом, все преобразования, проделываемые с индексируемым текстом, также проделываются и с частями строки запроса. Это могут быть приведение к нижнему регистру для того, чтобы сделать поиск нечувствительным к регистру, удаление запрещенных слов и т.д. В противоположность парсеру запросов, методы API не преобразовывают или фильтруют входные элементы. Таким образом, API является более подходящим для сгенерированных компьютером или не разбитых на лексемы полей. Парсинг запроса
Метод Этот объект может использоваться в методах программного интерфейса для объединения программно сгенерированных запросов с введенными пользователем. Сейчас в некоторых случаях только таким способом можно будет производить поиск значений в полях, которые не были разбиты на лексемы.
Метод
Если этот параметр опущен, то используется текущая локаль.
Можно также указать используемую по умолчанию кодировку для
строки запроса через метод
Результаты поискаРезультат поиска является массивом объектов Zend_Search_Lucene_Search_QueryHit. Все эти объекты имеют два свойства: $hit->document - номер документа в индексе, $hit->score - ранг "хита" в результате поиска. Результат упорядочен по рангу ("хиты" с наибольшим рангом идут первыми). Объект Zend_Search_Lucene_Search_QueryHit также предоставляют все поля документа Zend_Search_Lucene_Document как свойства объекта. В данном примере возвращается "хит" и соответствующий ему документ имеет два поля: заголовок и автор.
Сохраненные в индексе поля всегда возвращаются в кодировке UTF-8.
Исходный объект документа Zend_Search_Lucene_Document может также
быть получен из Zend_Search_Lucene_Search_QueryHit. Вы можете
извлечь сохраненные в индексе части документа, используя метод
Поля, доступные через объект Zend_Search_Lucene_Document, определяются во время индексирования. Поля документа либо только индексируются, либо индексируются и сохраняются в индексе индесирующим приложением (например, LuceneIndexCreation.jar). Обратите внимание, что идентификатор документа (в нашем примере — 'path') также сохраняется в индексе и должен извлекаться из него. Ранжирование результатаZend_Search_Lucene использует тот же самый алгоритм ранжирования, что и Java Lucene. Результаты поиска по умолчанию сортируются по рангу (релевантности). "Хиты" с наибольшим рангом идут первыми, и документы, имеющие больший ранг, больше соответствуют запросу, чем документы с меньшим рангом. Приблизительно говоря, документы, в которых искомый элемент или фраза встречаются чаще, будут иметь более высокий ранг.
Число, соответствующее рангу, может быть получено через
свойство Для вычисления ранга используется класс Zend_Search_Lucene_Search_Similarity. За подробностями см. раздел Расширяемость. Алгоритмы ранжирования. Сортировка результатов поискаПо умолчанию результаты поиска сортируются по рангу. Вы можете изменить это поведение установкой поля (полей) для сортировки, типа сортировки и порядка сортировки. $index->find() может принимать несколько необязательных параметров: $sortField является именем сохраненного в индексе поля для сортировки результата.
$sortType может быть опущен или принимать значения
$sortOrder может быть опущен или принимать значения
Будьте осторожны, когда используете сортировку, отличную от принятой по умолчанию. Для этого нужно полное извлечение документов из индекса, что может привести к резкому снижению производительности. Подсветка результатов поиска
Метод
Метод
|
|