Вот настройка, у меня есть индекс Lucene, и он хорошо работает с 2000 документами, которые я проиндексировал. Я использую Люк (Lucene Index Toolbox, v.0.9.2) для отладки запросов и использую ZF 1.9.
Макет моего индекса Lucene выглядит следующим образом:
I = Indexed
T = Tokenized
S = Stored
Fields:
author - ITS
category - ITS
publication - ITS
publicationdate - IS
summary - ITS
title - ITS
В основном у меня есть форма, доступная для поиска по вышеуказанным полям, позволяющая смешивать и сопоставлять любую из вышеуказанной информации и анализировать ее в запрос zend luceue. Проблема не в этом, проблема в том, что когда я начинаю комбинировать термины, метод «оптимизации», который срабатывает при поиске, приводит к тому, что запрос просто исчезает.
Вот пример поиска, который я выполняю прямо сейчас:
Версия формы:
Title: test title
Publication: publication name
Анализ запросов Lucene:
+(title:test title) +(publication:publication name)
Теперь, если я возьму эту строку запроса, вставлю ее в LUKE и нажму «Поиск», она вернет результаты нормально. Когда я использую метод Query Find, он просто срывается. Итак, я провел небольшое исследование того, как он работает, и обнаружил проблему (я считаю)
Во-первых, вот фактические строки кода, выполняющие поиск:
$searchQuery = "+(title:test title) +(publication:publication name)";
$hits = new ArrayObject($this->index->find($searchQuery));
Это упрощенная версия фактического кода, но именно это он и генерирует.
Вот что я заметил после некоторой отладки, метод "optimize" просто уничтожает сам запрос. Я создал следующий код:
$rewrite = $searchQuery->rewrite($this->index);
$optimize = $searchQuery->rewrite($this->index)->optimize($this->index);
echo "======<br/>";
echo "Original: ".$searchQuery."<br/>";
echo "Rewrite: ".$rewrite."<br/>";
echo "Optimized + Rewrite: ".$optimize."<br/>";
echo "======<br/>";
Что выводит следующий текст:
======
Original: +(title:test title) +(publication:publication name)
Rewrite: +(title:test title) +(publication:publication name)
Optimized + Rewrite:
======
Обратите внимание на то, что третий выход полностью пуст. Похоже, что переписать и оптимизировать в запросе приводит к тому, что строка запроса просто опустошается.
Кто-нибудь знает, почему метод оптимизации, кажется, просто удаляет мой запрос полностью? Мне не хватает фильтра или какого-то интерфейса, который, возможно, нужно проанализировать? Все запросы работают отлично, когда я вставляю их в LUKE и запускаю их вручную по индексу, но что-то глупое происходит с тем, как Zend анализирует запрос для выполнения поиска.
Любая помощь приветствуется.