2

Drupal 7 サイトを持っていますが、次の問題の解決策を見つけるのに苦労しています。

すべての cron タスクは正常に実行されていますが、検索インデックス cron は実行されています。ログにこのエラーが生成され、インデックス作成が停止します。entity_extract_ids()field.multilingual.incの関数と関係があるようですが、どこから始めればよいかわかりません。エラーログは次のとおりです。

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}

どんな助けや洞察も大歓迎です。

4

2 に答える 2

6

どのように修正したかをお伝えします。

私は EntityMalformedException: Missing bundle property on entity of type node エラーをウォッチログ (最近のログ メッセージ) で取得しました。私のインデックスが48%になる前は、cronの実行後も同じままでした。

私は多くのことをしましたが、他の提案は役に立ちませんでしたが、最終的に私はこれを行い、あなたにも提案しました:

  1. データベースをバックアップしてください!!!
  2. phpMyAdmin の「run sql」セクションに移動します。
  3. ここに「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 LIMIT 0,1"
    テーブルプレフィックスがある場合は、ここに置くことを忘れないでください。
  4. その結果、nid で 1 つの行が得られます。
  5. ノードテーブルに移動し、ここで「SELECT * FROM node WHERE nid=your-nid」を実行します。ここで、your-nid はステップ 3 の nid です。
  6. your-website/node/your-nid を開いてみてください - 私の場合、「404 エラー」が発生しました
  7. phpMyAdmin に戻り、この行を削除します
  8. cron を再度実行する

私としては、データベースからすべての「悪い」ノードを削除し、最終的に100%のインデックスを取得するためにこれを7〜8回行いました

phpMyAdmin にアクセスできない場合は、次のようにできると思います。

PHP フィルター モジュールを有効にしてデータベースをバックアップし、ページのノード タイプを作成します。たとえば、body のコードを追加します。

<?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 を再度実行]

上記のコードはテストしていないので、使用する場合はここに投稿してください。

ありがとうございます。

于 2012-11-18T23:57:54.927 に答える