Solrでのインデックス付けから未使用のノードを削除したいし、それらが再度インデックス付けされないようにする必要もあります。クエリを使用して未使用のノードIDのリストを取得します。
いずれかのノードが更新されている場合は、そのノードに再度インデックスを付ける必要があります。
どうすればこれを達成できますか?
D7の場合、フックを探しています:hook_apachesolr_exclude
Apachesolr.api.phpの例
/**
* This is the place to look for the replacement to hook_apachesolr_node_exclude
* You should define a replacement for the status callback and return
* FALSE for entities which you do not want to appear in the index and TRUE for
* those that you want to include
*/
/**
* This is invoked for each entity that is being inspected to be added to the
* index. if any module returns TRUE, the entity is skipped for indexing.
*
* @param integer $entity_id
* @param string $entity_type
* @param integer $row
* A complete set of data from the indexing table.
* @param string $env_id
* @return boolean
*/
function hook_apachesolr_exclude($entity_id, $entity_type, $row, $env_id) {
// Never index media entities to core_1
if ($entity_type == 'media' && $env_id == 'core_1') {
return TRUE;
}
return FALSE;
}
ここを参照してください: http://drupalcontrib.org/api/drupal/contributions%21apachesolr%21apachesolr.api.php/7
[〜#〜]更新[〜#〜]
特定のノード(エンティティ)を削除するには、 apachesolr_remove_entity
。
独自のモジュールを書き慣れている場合は、インデックスから特定のノードを除外するのに役立つフックがあります:hook_apachesolr_node_exclude($ node、$ namespace) 。
これは、インデックスに追加する資格がある各ノードのapachesolrモジュールによって呼び出されます。関数がTRUEを返す場合、ノードはインデックス付けのためにスキップされます。ただし、戻り値がTRUEであるため、すでにインデックスが作成されているノードは削除されません。これは、ノードが追加されないようにするだけです。 apachesolr_delete_node_from_index()を呼び出して、インデックスをクリーンアップする必要があります。
詳細については、こちらをご覧ください: http://api.drupalhelp.net/api/apachesolr/apachesolr.api.php/function/hook_apachesolr_node_exclude/7
これであなたが始めるのに十分であることを願っています!
Drupal 6これには http://drupal.org/project/apachesolr_exclude のようなモジュールがいくつかありますが、私は知りませんDrupal 7。