我有一个 Drupal 7 站点,我正在努力寻找解决以下问题的方法。
我的所有 cron 任务都运行良好,但搜索索引 cron。它会在日志中产生此错误并停止编制索引。看起来它与 field.multilingual.inc 中的 entity_extract_ids()
函数有关,但我不知道从哪里开始。这是错误日志:
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}
如有任何帮助或见解,我们将不胜感激。
最佳答案
我会告诉你我是如何修复它的。
在尝试索引搜索后(在 cron 运行之后),我的监视日志(最近的日志消息)中出现 EntityMalformedException: Missing bundle property on entity of type node 错误。在我的索引之前假设是 48%,在 cron 运行之后它保持不变。
我做了很多事情,其他建议对我没有帮助,但最后我做了这个并建议你:
- 备份你的数据库!!!
- 转到 phpMyAdmin,“运行 sql”部分。
- 将“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。重新索引 ASC,n.nid ASC LIMIT 0,1"
如果你有表前缀,不要忘记把它放在这里。 - 结果你会得到一行 nid,请注意。
- 转到节点表并在此处运行“SELECT * FROM node WHERE nid=your-nid”,其中 your-nid 是第 3 步中的 nid
- 尝试打开 your-website/node/your-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 Filter”
点击“预览” 您应该在屏幕上看到节点 ID。像 phpMyAdmin 说明的第 6 步一样测试它并记住 现在你可以通过添加到正文来删除它
<?php
$nid = "your-nid";
db_delete('node')
->condition('nid', $nid)
->execute();
?>
再次点击预览 再次运行 Cron
上面的代码我没有测试,所以如果你要使用它,请在这里发布如果它有效
谢谢你,祝你索引愉快 ;)
关于php - Drupal 7 异常 'EntityMalformedException' 试图运行搜索索引 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12719384/