我必须将 Solr 搜索集成到我的一个 CakePHP 项目中。我已经使用 composer 安装了 Solr 和 Solarium,但找不到如何使用 Solr 开始搜索。CakePHP 中是否有任何示例代码?
3 回答
您需要弄清楚的第一件事是如何在您的 CakePHP 应用程序中公开 Solarium API。通常这意味着将一些第三方 PHP 文件保存到Vendor
您的应用程序的目录中(查看此处了解更多信息)。
完成此操作后,您有两个选择:
- 直接在控制器的操作中与 Solarium API 交互。
- 实现一个 Solarium 数据源,以便您可以使用 CakePHP 的模型构造。
选项1
此选项与 CakePHP 的开发人员希望您执行 MVC 的方式不太一致,并且每次您想将某些内容放入 Solr 或查询它(例如连接到 Solr 数据库)时,您都必须生成相当多的代码。如果您与 Solr 数据库的交互很少,那么我建议您沿着这条路线走。也许您可以将您的访问封装在单独的帮助类或函数中,而不是这样:
public function void myControllerAction() {
// create a client instance
$client = new Solarium\Client($config);
// get a select query instance
$query = $client->createQuery($client::QUERY_SELECT);
// this executes the query and returns the result
$resultset = $client->execute($query);
// expose the result set to your view
$this->set('records', $resultset);
}
你可以有这个:
public function void myControllerAction() {
$resultset = solarium_get_records();
// expose the result set to your view
$this->set('records', $resultset);
}
选项 2
此选项涉及更多,需要您编写 Solarium数据源,就像开发人员为 MySql 和 Postgres 编写的一样。这确实需要您彻底了解 CakePHP 模型引擎的内部工作原理,但是通过查看其他数据源的工作原理,它不应该是火箭科学。请放心,如果您这样做并将您的代码开源,其他开发人员会喜欢在他们自己的 CakePHP 应用程序中使用它!
这种方法的好处是您将成功地将您的应用程序从特定的数据库实现中抽象出来。因此,如果您决定不喜欢使用 Solr 并且更喜欢不同的搜索引擎,您可以迁移您的数据,编写一个新的数据源(如果不存在的话),一切就绪。
这可能并不能完全回答您的问题,而是引导您朝着正确的方向前进并突出您应该考虑的一些方面。
我已将 Solr 与选项 1 集成。但是选项 2 是可行的,但由于时间限制,我必须选择选项 1。我们可以直接包括 Solarium 供应商,并在需要时将其类包含在我们的控制器中,并使用 solr 的添加/获取查询。
基本上有3个主要步骤: 1:安装Solr。2:使用作曲家安装 Solarium 3:在控制器或组件文件中使用您的脚本以获得结果。
您可以从这里获得完整的参考和示例代码库:
http://findnerd.com/list/view/Solr-integration-in-CakePHP-with-solarium-client/1946/
谢谢。
我已经使用 Sam 的选项 2(作为数据源)集成了 Solr
https://github.com/Highstrike/cakephp-solr-datasource
您还可以找到有关如何通过示例使用它的说明