Как кэшировать результаты поиска Zend Lucene в Code Igniter? - PullRequest
1 голос
/ 17 июня 2011

Я не уверен, что это лучший способ сделать это, но моя цель состоит в том, чтобы разбить результаты поиска на люцене на страницы.

Я подумал, что имеет смысл запустить поиск, хранитьвсе результаты в кеше, а затем на контроллере результатов есть функция страницы, которая может возвращать любой определенный набор результатов из кэшированных результатов.

Это плохой подход?Я никогда не использовал кеширование, поэтому не знаю с чего начать.Драйвер кэширования CI выглядел многообещающе, но все выдает ошибку сервера.Я не знаю, нужно ли мне устанавливать APC, Memcached или что делать.

Помощь!

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Lucene - это поисковая система, созданная для масштабирования. Вы можете продвинуть его довольно далеко, пока не возникнет необходимость кэшировать результаты поиска Я бы посоветовал вам использовать настройки по умолчанию и запустить его.

Если вы все еще чувствуете необходимость в кеше, сначала посмотрите на FAQ по Lucene , а затем на следующем уровне, возможно, будет что-то в строках memcache.

Надеюсь, это поможет!

0 голосов
/ 28 сентября 2011

Zend Search Lucene индексируется в файловой системе и, как указано выше, создан для масштабирования. Если вы не индексируете сотни тысяч документов, кэширование на самом деле не является необходимым, особенно если учесть, что все, что вы эффективно делаете, - это извлечение данных из одного файла и сохранение его в другом.

С другой стороны, если вы сохраняете, скажем, идентификатор продукта в своем поисковом индексе, а затем выбираете продукты из базы данных, когда получаете результат, это стоит кэшировать. Этого легко достичь, используя Zend_Cache .

Базовый пример кэширования Zend Db приведен здесь:

$frontendOptions = array(
    'automatic_serialization' => true
);

$backendOptions = array(
    'cache_dir' => YOUR_CACHE_PATH_ON_THE_FILE_SYSTEM,
    'file_name_prefix' => 'my_cache_prefix',
);

$cache = Zend_Cache::factory('Core',
    'File',
    $frontendOptions,
    $backendOptions
);
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);

Это должно быть добавлено в ваш файл начальной загрузки в метод _initDbCache (вызывайте его как хотите).

Конечно, это очень простая реализация и не достигается полное кэширование результатов, более подробную информацию о Zend Caching с Zend Db можно найти здесь .

...