elasticsearch,drupal,drupal-8,Php,elasticsearch,Drupal,Drupal 8" /> elasticsearch,drupal,drupal-8,Php,elasticsearch,Drupal,Drupal 8" />

Php Drupal 8存储节点数据替代存储

Php Drupal 8存储节点数据替代存储,php,elasticsearch,drupal,drupal-8,Php,elasticsearch,Drupal,Drupal 8,没有太多的代码示例,只有一个问题和一个想法 我希望能够使用弹性DSL查询将节点数据(来自内容创建)保存到内部数据存储中 我听过/看过关于Drupal支持MongoDB的幻灯片,这让我觉得这是可行的。即使我必须重写NodeForm/save处理程序,是否有办法为此操作节点实体?我的想法是将它们保存两次。首先,使用普通节点,然后使用“弹性DSL查询”(不确定它们是什么) 无论如何,您可以使用hook\u node\u presave(): 每次进行正常节点保存时都会调用它,您可以将代码放在那里进行

没有太多的代码示例,只有一个问题和一个想法

我希望能够使用弹性DSL查询将节点数据(来自内容创建)保存到内部数据存储中


我听过/看过关于Drupal支持MongoDB的幻灯片,这让我觉得这是可行的。即使我必须重写NodeForm/save处理程序,是否有办法为此操作节点实体?

我的想法是将它们保存两次。首先,使用普通节点,然后使用“弹性DSL查询”(不确定它们是什么)

无论如何,您可以使用
hook\u node\u presave()


每次进行正常节点保存时都会调用它,您可以将代码放在那里进行“弹性DSL”保存。通过这个钩子,你可以访问将要保存的数据,但如果需要,你也可以修改它们。

这是完全可行的。我们在所有Drupal项目中都使用Elasticsarch,主要用于全文搜索。每个节点保存两次:

  • 在Drupal的数据库中,这是每个代码行中使用的节点
  • 在Elasticsearch索引中有一次,这个索引从未被“使用”;我们使用全文搜索来查找NID,然后在Drupal DB中检索完整的对象
您可以使用
elasticsearch\u 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\u connector
将为您提供映射工具:

$client->indices()->putMapping($params); 
$client->indices()->putSettings($params); 
$client->search($params); 

缺点是两个建议中的钩子都是Drupal 8的一部分:/哼哼,你没有给你的问题加上标签和标题吗?我的意思是你不是sorryAh,但它们是Drupal 8的一部分。这两个建议中的钩子都是Drupal 8的一部分:/