Drupal 8 商店节点数据替代商店
Drupal 8 store node data alternative in store
没有太多的代码示例,只有一个问题和一个想法。
我希望能够使用弹性 DSL 查询将节点数据(来自内容创建)保存到内部数据存储中。
我有 heard/seen 个关于 Drupal 支持 MongoDB 的幻灯片,这让我认为这是可行的。即使我必须覆盖 NodeForm/save 处理程序,是否有办法为此目的操纵节点实体?
我的想法是将它们保存两次。首先,使用普通节点,其次使用那些 "elastic DSL queries"(不确定它们是什么)。
无论如何,你可以使用 hook_node_presave()
:
每次正常节点保存完成时都会调用它,您可以在其中放置用于 "elastic DSL" 保存的代码。从该挂钩,您可以访问将要保存的数据,但如果需要,您也可以更改它们。
这是完全可行的。我们在所有 Drupal 项目中都使用 Elasticarch,主要是将其用于全文搜索。每个节点保存两次:
- Drupal 数据库中的一次,这是每个代码行中使用的节点
- 在 Elasticsearch 索引中有一次,这一次从来没有 "used" ;我们使用全文搜索来查找 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);
没有太多的代码示例,只有一个问题和一个想法。
我希望能够使用弹性 DSL 查询将节点数据(来自内容创建)保存到内部数据存储中。
我有 heard/seen 个关于 Drupal 支持 MongoDB 的幻灯片,这让我认为这是可行的。即使我必须覆盖 NodeForm/save 处理程序,是否有办法为此目的操纵节点实体?
我的想法是将它们保存两次。首先,使用普通节点,其次使用那些 "elastic DSL queries"(不确定它们是什么)。
无论如何,你可以使用 hook_node_presave()
:
每次正常节点保存完成时都会调用它,您可以在其中放置用于 "elastic DSL" 保存的代码。从该挂钩,您可以访问将要保存的数据,但如果需要,您也可以更改它们。
这是完全可行的。我们在所有 Drupal 项目中都使用 Elasticarch,主要是将其用于全文搜索。每个节点保存两次:
- Drupal 数据库中的一次,这是每个代码行中使用的节点
- 在 Elasticsearch 索引中有一次,这一次从来没有 "used" ;我们使用全文搜索来查找 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);