我不确定这是否是解决此问题的最佳方法,但我的目标是对我的 lucene 搜索结果进行分页。
我认为运行搜索,将所有结果存储在缓存中,然后在我的结果控制器上具有一个页面功能,可以从缓存结果中返回任何特定的结果子集是有意义的。
这是一个不好的方法吗?我从来没有使用过任何类型的缓存,所以不知道从哪里开始。CI 缓存驱动程序看起来很有希望,但一切都会引发服务器错误。我不知道我是否需要安装APC,或者Memcached,或者做什么。
帮助!
我不确定这是否是解决此问题的最佳方法,但我的目标是对我的 lucene 搜索结果进行分页。
我认为运行搜索,将所有结果存储在缓存中,然后在我的结果控制器上具有一个页面功能,可以从缓存结果中返回任何特定的结果子集是有意义的。
这是一个不好的方法吗?我从来没有使用过任何类型的缓存,所以不知道从哪里开始。CI 缓存驱动程序看起来很有希望,但一切都会引发服务器错误。我不知道我是否需要安装APC,或者Memcached,或者做什么。
帮助!
Lucene 是一个为规模而构建的搜索引擎。您可以将其推得很远,直到需要缓存搜索结果为止。我建议您使用默认设置并运行它。
如果您仍然觉得需要缓存,请先查看此Lucene 常见问题解答,然后下一个级别可能是关于 memcache 的内容。
希望能帮助到你!
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 Caching with Zend Db 的信息可以在这里找到。