Поиск нескольких индексов одновременно с помощью Lucene Search - PullRequest
3 голосов
/ 01 апреля 2009

Я использую Zend_Search_Lucene для поиска по сайту. Я создал отдельные индексы для разных типов данных (например, один для пользователей, один для сообщений и т. Д.). Результаты аналогично разделены по типу данных, однако есть опция «все», которая должна показывать комбинацию различных типов результатов. Можно ли искать по разным показателям одновременно? или мне нужно индексировать все в индексе all?

Обновление: readme для ZF 1.8 предполагает, что теперь это можно сделать в ZF 1.8, но я не смог отследить, где это находится в документации.

Ответы [ 3 ]

7 голосов
/ 03 мая 2009

Таким образом, после некоторых исследований вы должны использовать Zend_Search_Lucene_Interface_MultiSearcher. Я не вижу упоминаний об этом в документации на момент написания этой статьи, но если вы посмотрите на реальный класс в ZF 1.8, то просто использовать

$index = new Zend_Search_Lucene_Interface_MultiSearcher();
$index->addIndex(Zend_Search_Lucene::open('search/index1'));
$index->addIndex(Zend_Search_Lucene::open('search/index2'));
$index->find('someSearchQuery');

Обратите внимание, что он не соответствует синтаксису PEAR, поэтому мы не будем работать с Zend_Loader :: loadClass

3 голосов
/ 03 апреля 2009

Именно так я и обработал поиск huddler.com . Я использовал несколько индексов Zend_Search_Lucene, по одному на тип данных. Для опции «все» у меня просто был другой индекс, который включал все из всех индексов - поэтому, когда я добавил документы в индекс, я добавил их дважды, один раз в соответствующий индекс «типа» и один раз в «все». " индекс. Zend Lucene сильно недооценен по сравнению с другими реализациями Lucene, поэтому это было лучшее решение, которое я нашел. Вы обнаружите, что порт Zend поддерживает только подмножество синтаксиса запросов lucene, и плохо - даже для умеренных индексов (10–100 МБ), запросы, такие как «a *», или фразы в кавычках не работают должным образом (если на все).

Когда мы принесли большой сайт на нашу платформу, мы обнаружили, что Zend Lucene не масштабируется. Наш индекс достиг примерно 1,0 ГБ, а простые запросы занимали до 15 секунд. Некоторые запросы заняли минуту или больше. И создание индекса с нуля заняло около 20 часов.

Я перешел на Solr; Solr не только работает в 50 раз быстрее во время индексации и в 1000 раз быстрее для многих запросов (большинство запросов заканчиваются менее чем за 5 мс, все заканчиваются менее чем за 100 мс), это намного более мощно. Кроме того, мы смогли перестроить наш индекс более 100 000 документов с нуля за 30 минут (вместо 20 часов).

Теперь все в одном индексе Solr с полем типа; Я выполняю несколько запросов к индексу для каждого поиска, каждый с различным фильтром «type:» и один без «type:» для опции «all».

Если вы планируете увеличить свой индекс до 100+ МБ, вы получаете по крайней мере несколько поисковых запросов в минуту или хотите предложить какие-либо расширенные функции поиска, я настоятельно рекомендую отказаться от Zend_Search_Lucene.

2 голосов
/ 01 апреля 2009

Я не знаю, как он интегрируется с Zend, но в Lucene вместо обычного IndexSearcher можно использовать MultiSearcher .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...