如何在Code Igniter中缓存Zend Lucene搜索结果?

时间:2011-06-17 09:55:27

标签: caching codeigniter lucene zend-search-lucene

我不确定这是否是最佳解决方法,但我的目标是对我的lucene搜索结果进行分页。

我认为运行搜索,将所有结果存储在缓存中,然后在我的结果控制器上有一个页面函数可以返回缓存结果的任何特定结果子集。

这是一种不好的方法吗?我从来没有使用任何类型的缓存,所以不知道从哪里开始。 CI缓存驱动程序看起来很有前景,但一切都会引发服务器错误。我不知道是否需要安装APC,或Memcached,或者做什么。

帮助!

2 个答案:

答案 0 :(得分:1)

Lucene是一个专为规模而设计的搜索引擎。你可以将它推得很远,直到需要缓存搜索结果。我建议你使用默认设置并运行它。

如果您仍然觉得需要缓存,请首先查看此Lucene FAQ,然后下一个级别可能是memcache的内容。

希望它有所帮助!

答案 1 :(得分:0)

Zend Search Lucene 在文件系统上编入索引,并且正如上面的用户所述,是为了扩展而构建的。除非您索引数十万个文档,否则缓存并不是必需的 - 特别是因为您实际上只是从一个文件中获取数据并将其存储在另一个文件中。

另一方面,如果您只在搜索索引中存储产品ID,然后在获得结果时从数据库中选择产品,那么非常值得缓存​​。使用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 Db进行Zend缓存的更多信息here