Php Drupal 7异常“EntityFormedException”正在尝试运行搜索索引cron

Php Drupal 7异常“EntityFormedException”正在尝试运行搜索索引cron,php,drupal,cron,Php,Drupal,Cron,我有一个Drupal7站点,我正在努力找到以下问题的解决方案 我所有的cron任务都运行良好,但是搜索索引cron。它在日志中产生此错误并停止索引。看起来它与field.multilingual.inc中的entity_extract_id函数有关,但我不知道从哪里开始。以下是错误日志: exception 'EntityMalformedException' with message 'Missing bundle property on entity of type node.' in /h

我有一个Drupal7站点,我正在努力找到以下问题的解决方案

我所有的cron任务都运行良好,但是搜索索引cron。它在日志中产生此错误并停止索引。看起来它与field.multilingual.inc中的entity_extract_id函数有关,但我不知道从哪里开始。以下是错误日志:

exception 'EntityMalformedException' with message 'Missing bundle property on entity of type node.' in /home/xxxxx/public_html/includes/common.inc:7562 
Stack trace: 
#0 /home/xxxxx/public_html/modules/field/field.multilingual.inc(268): entity_extract_ids('node', Object(stdClass)) 
#1 /home/xxxxx/public_html/modules/field/field.attach.inc(1111): field_language('node', Object(stdClass), NULL, 'en')
#2 /home/xxxxx/public_html/modules/node/node.module(1358): field_attach_prepare_view('node', Array, 'search_index', 'en') 
#3 /home/xxxxx/public_html/modules/node/node.module(1284): node_build_content(false, 'search_index', 'en') 
#4 /home/xxxxx/public_html/modules/node/node.module(2668): node_view(false, 'search_index') 
#5 /home/xxxxx/public_html/modules/node/node.module(2650): _node_index_node(Object(stdClass)) 
#6 [internal function]: node_update_index() 
#7 /home/xxxxx/public_html/includes/module.inc(826): call_user_func_array('node_update_ind...', Array) 
#8 /home/xxxxx/public_html/modules/search/search.module(363): module_invoke('node', 'update_index') 
#9 [internal function]: search_cron()
#10 /home/xxxxx/public_html/sites/all/modules/ultimate_cron/ultimate_cron.module(726): call_user_func('search_cron') 
#11 [internal function]: _ultimate_cron_run_hook('search_cron', Array)
#12 /home/xxxxx/public_html/sites/all/modules/background_process/background_process.module(428): call_user_func_array('_ultimate_cron_...', Array)
#13 [internal function]: background_process_service_start('ultimate_cron%3...') 
#14 /home/xxxxx/public_html/includes/menu.inc(516): call_user_func_array('background_proc...', Array) #15 /home/xxxxx/public_html/index.php(21): menu_execute_active_handler() 
#16 {main}

任何帮助或见解都将不胜感激。

我将告诉您我是如何修复它的

我得到EntityAlFormedException:在cron运行后尝试索引搜索后,我的watchlog最近的日志消息中节点类型的实体缺少bundle属性。在我的指数为48%之前,在cron运行之后,它保持不变

我做了很多事情,其他建议对我没有帮助,但最后我做了这件事,并建议你:

备份你的数据库!!! 转到phpMyAdmin,以运行sql部分。 放在这里,从节点n左连接搜索_数据集d中选择n.nid,d.type='node',d.sid=n.nid,其中d.sid为NULL或d.reindex 0按d.reindex ASC排序,n.nid ASC限制0,1 如果你有表格前缀,别忘了把它放在这里。 因此,你会得到一行与nid,选择它的心。 转到节点表并在此处运行,从节点中选择*其中nid=您的nid,其中您的nid是步骤3中的nid 尝试打开你的网站/节点/你的nid-对我来说,我得到了404错误 返回phpMyAdmin并删除此行 再次运行cron 对于我来说,我这样做了7-8次,从数据库中删除了所有坏节点,最后得到了100%的索引

如果您无法访问phpMyAdmin,我想您可以这样做:

打开PHP过滤模块并备份数据库 创建页面的节点类型,例如,添加代码

<?php
$result = db_query_range("SELECT n.nid FROM {node} n LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid WHERE d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid ASC", 0, 1);
echo $result;
?>
当然选择PHP过滤器

单击预览 您应该在屏幕上看到节点id。像phpMyAdmin说明的第6步一样测试它,并在脑海中选择 现在您可以通过添加到主体来删除它

<?php 
$nid = "your-nid";
db_delete('node')
  ->condition('nid', $nid)
  ->execute();
?>
再次单击“预览” 再次运行Cron

上面的代码我没有测试过,所以如果你想使用它,请在这里发布


谢谢你,快乐

此错误,尤其是由搜索引起的错误,例如Apache Solr与索引的节点相关,但Drupal中不再存在

这可能发生在以下情况:

节点也从Drupal中删除了术语或用户,但仍在Solr中索引, Drupal的多个实例共享同一个Solr,因此一些节点被不同的实例索引,但它们不在数据库中, 解决方案包括:

清除Solr索引和缓存,然后重新索引节点, 如果故障节点存在-重新保存它们会有所帮助, 跟踪无法从回溯中加载的节点,并尝试手动加载,例如drush ev var_dumpnode_load12;看看为什么会失败。 如果这种情况经常发生,请确保从Drupal中删除的节点也从Solr索引中删除


有关更多信息,请查看:在DA

我尝试了这个,效果非常好!Cron开始继续并完成搜索索引。谢谢你的回答。非常感谢