2017-04-04 45 views
2

没有太多的代码示例只是一个问题和想法。Drupal 8商店节点数据替代商店

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

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

回答

1

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

在Drupal的数据库
  • 一次,这是每行代码在Elasticsearch指数
  • 一次,这个人是从来没有“拿来主义”的节点使用;我们使用全文搜索来找到NIDS的话,我们在Drupal DB

您可以使用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); 
+0

不足之处是在任何建议的钩的Drupal 8的一部分:/ – Kal

+0

哼,你没有标签和标题您的问题与[标签:Drupal-8]? – zessx

+0

我的意思是不抱歉 – Kal

1

我的想法是让他们保存两次。首先,通过使用那些“弹性DSL查询”(不确定它们是什么)来获得正常节点。

不管怎么说,你可以使用hook_node_presave()

http://www.drupalcontrib.org/api/drupal/drupal%21core%21modules%21node%21node.api.php/function/hook_node_presave/8

这将是所谓的每一个正常的节点储蓄将完成时间,那里你可以把你的代码为“弹性DSL”保存。从那个钩子你可以访问将被保存的数据,但你也可以改变它们,如果你需要这样做。

+0

不足之处是在任何建议的钩的Drupal 8的一部分:/ – Kal