没有太多代码示例只是一个问题和想法。
我希望能够使用弹性DSL查询将节点数据(从内容创建)保存到内部数据存储区。
我听说/看过有关Drupal支持MongoDB的幻灯片,这让我认为这是可行的。即使我必须覆盖NodeForm / save处理程序,有没有办法为此目的操纵节点实体?
答案 0 :(得分:1)
我的想法是让他们保存两次。首先,通过使用那些"弹性DSL查询来获得正常节点和第二个节点。 (不确定它们是什么)。
无论如何,您可以使用hook_node_presave()
:
每次正常节点保存都会被调用,并且你可以在那里放置你的代码"弹性DSL"扑救。从该钩子,您可以访问将被保存的数据,但如果您需要,也可以更改它们。
答案 1 :(得分:1)
这是完全可行的。我们在所有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);