【发布时间】:2017-04-04 10:23:48
【问题描述】:
不要有太多的代码示例,只是一个问题和一个想法。
我希望能够使用弹性 DSL 查询将节点数据(来自内容创建)保存到内部数据存储中。
我听过/看过关于 Drupal 支持 MongoDB 的幻灯片,这让我认为这是可行的。即使我必须重写 NodeForm/save 处理程序,是否有办法为此目的操纵节点实体?
【问题讨论】:
标签: php elasticsearch drupal drupal-8
不要有太多的代码示例,只是一个问题和一个想法。
我希望能够使用弹性 DSL 查询将节点数据(来自内容创建)保存到内部数据存储中。
我听过/看过关于 Drupal 支持 MongoDB 的幻灯片,这让我认为这是可行的。即使我必须重写 NodeForm/save 处理程序,是否有办法为此目的操纵节点实体?
【问题讨论】:
标签: php elasticsearch drupal drupal-8
这是完全可行的。我们在所有 Drupal 项目中都使用 Elasticsarch,主要用于全文搜索。每个节点保存两次:
您可以使用elasticsearch_connector 模块来获得这样一个易于使用的管理器:
$cluster = Cluster::load('ES-CLUSTER');
$clientManager = \Drupal::service('elasticsearch_connector.client_manager');
$client = $clientManager->getClientForCluster($this->cluster);
然后使用这个客户端来管理你的节点的索引:
function hook_node_insert($node) {
$client->insert($node);
}
function hook_node_update($node) {
$client->update($node);
}
function hook_node_insert($node) {
$client->delete($node);
}
工作的最大部分是创建映射(如果您希望通过模块对其进行管理),但这里elasticsearch_connector 将为您提供工具:
$client->indices()->putMapping($params);
$client->indices()->putSettings($params);
$client->search($params);
【讨论】:
我的想法是让他们保存两次。首先,拥有普通节点,其次是使用那些“弹性 DSL 查询”(不确定它们是什么)。
无论如何,你可以使用hook_node_presave():
每次正常节点保存完成时都会调用它,您可以将代码用于“弹性 DSL”保存。通过该挂钩,您可以访问将要保存的数据,但如果需要,您也可以更改它们。
【讨论】: