diff --git CHANGELOG.txt CHANGELOG.txt
index 59cd857..58964b5 100644
--- CHANGELOG.txt
+++ CHANGELOG.txt
@@ -4,6 +4,7 @@ Apache Solr Attachments x.x-x.x, xxxx-xx-xx
 
 Apache Solr Attachments 6.x-1.x, xxxx-xx-xx
 ------------------------------
+#1064976 by jpmckinney: Respect hook_apachesolr_node_exclude.
 #1059768 by jpmckinney: Make error message more helpful.
 #1059756 by jpmckinney: Missing drupal_set_message.
 #1059744 by jpmckinney: Some variables not deleted in hook_uninstall.
diff --git apachesolr_attachments.admin.inc apachesolr_attachments.admin.inc
index b2ed4e6..9937513 100644
--- apachesolr_attachments.admin.inc
+++ apachesolr_attachments.admin.inc
@@ -233,76 +233,87 @@ function apachesolr_attachments_add_documents(&$documents, $nid, $namespace = 'a
 
     $hash = apachesolr_site_hash();
 
-    // Since there is no notification for an attachment being unassociated with a
-    // node (but that action will trigger it to be indexed again), we check for
-    // fids that were added before but no longer present on this node.
-
-    $fids = array();
-    $result = db_query("SELECT fid FROM {apachesolr_attachments_files} WHERE nid = %d", $node->nid);
-    while ($row = db_fetch_array($result)) {
-      $fids[$row['fid']] = $row['fid'];
-    }
-
-    $files = apachesolr_attachments_get_indexable_files($node);
-
-    // Find deleted files.
-    $missing_fids = array_diff_key($fids, $files);
-    if ($missing_fids) {
-      db_query("UPDATE {apachesolr_attachments_files} SET removed = 1 WHERE fid IN (". db_placeholders($missing_fids) .")", $missing_fids);
-    }
-    $new_files = array_diff_key($files, $fids);
-    // Add new files.
-    foreach ($new_files as $file) {
-      db_query("INSERT INTO {apachesolr_attachments_files} (fid, nid, removed, sha1) VALUES (%d, %d, 0, '')", $file->fid, $node->nid);
+    // Let any module exclude this node from the index.
+    $build_document = TRUE;
+    foreach (module_implements('apachesolr_node_exclude') as $module) {
+      $exclude = module_invoke($module, 'apachesolr_node_exclude', $node, $namespace);
+      if (!empty($exclude)) {
+        $build_document = FALSE;
+      }
     }
-    foreach ($files as $file) {
-      $text = apachesolr_attachments_get_attachment_text($file);
-
-      if ($text) {
-        $document = new Apache_Solr_Document();
-        // A single file might be attached to multiple nodes.
-        $document->id = apachesolr_document_id($file->fid .'-'. $node->nid, 'file');
-        $document->url = file_create_url($file->filepath);
-        $document->path = $file->filepath;
-        $document->hash = $hash;
-        $document->entity = 'file';
-        $document->site = url(NULL, array('absolute' => TRUE));
-        $document->nid = $node->nid;
-        $document->title = $file->filename;
-        $document->created = apachesolr_date_iso($file->timestamp);
-        $document->changed = $document->created;
-        $document->status = $node->status;
-        $document->sticky = $node->sticky;
-        $document->promote = $node->promote;
-        $document->uid = $node->uid;
-        $document->name = $node->name;
-        if (empty($node->language)) {
-          // 'und' is the language-neutral code in Drupal 7.
-          $document->language = 'und';
-        }
-        else {
-          $document->language = $node->language;
-        }
-        $document->body = apachesolr_clean_text($file->description) .' '. $text;
 
-        $document->ss_filemime = $file->filemime;
-        $document->ss_file_node_title = apachesolr_clean_text($node->title);
-        $document->ss_file_node_url = url('node/' . $node->nid, array('absolute' => TRUE));
+    if ($build_document) {
+      // Since there is no notification for an attachment being unassociated with a
+      // node (but that action will trigger it to be indexed again), we check for
+      // fids that were added before but no longer present on this node.
 
-        apachesolr_add_taxonomy_to_document($document, $node);
+      $fids = array();
+      $result = db_query("SELECT fid FROM {apachesolr_attachments_files} WHERE nid = %d", $node->nid);
+      while ($row = db_fetch_array($result)) {
+        $fids[$row['fid']] = $row['fid'];
+      }
 
-        // Let modules add to the document.
-        foreach (module_implements('apachesolr_update_index') as $module) {
-          $function = $module .'_apachesolr_update_index';
-          $function($document, $node, $namespace);
-        }
-        drupal_alter('apachesolr_attachment_index', $document, $node, $file, $namespace);
+      $files = apachesolr_attachments_get_indexable_files($node);
 
-        $documents[] = $document;
+      // Find deleted files.
+      $missing_fids = array_diff_key($fids, $files);
+      if ($missing_fids) {
+        db_query("UPDATE {apachesolr_attachments_files} SET removed = 1 WHERE fid IN (". db_placeholders($missing_fids) .")", $missing_fids);
       }
-      else {
-        // Shortened project name because the watchdog limits type to 16 characters.
-        watchdog('ApacheSolrAttach', 'Could not extract any indexable text from %filepath', array('%filepath' => $file->filepath), WATCHDOG_WARNING);
+      $new_files = array_diff_key($files, $fids);
+      // Add new files.
+      foreach ($new_files as $file) {
+        db_query("INSERT INTO {apachesolr_attachments_files} (fid, nid, removed, sha1) VALUES (%d, %d, 0, '')", $file->fid, $node->nid);
+      }
+      foreach ($files as $file) {
+        $text = apachesolr_attachments_get_attachment_text($file);
+
+        if ($text) {
+          $document = new Apache_Solr_Document();
+          // A single file might be attached to multiple nodes.
+          $document->id = apachesolr_document_id($file->fid .'-'. $node->nid, 'file');
+          $document->url = file_create_url($file->filepath);
+          $document->path = $file->filepath;
+          $document->hash = $hash;
+          $document->entity = 'file';
+          $document->site = url(NULL, array('absolute' => TRUE));
+          $document->nid = $node->nid;
+          $document->title = $file->filename;
+          $document->created = apachesolr_date_iso($file->timestamp);
+          $document->changed = $document->created;
+          $document->status = $node->status;
+          $document->sticky = $node->sticky;
+          $document->promote = $node->promote;
+          $document->uid = $node->uid;
+          $document->name = $node->name;
+          if (empty($node->language)) {
+            // 'und' is the language-neutral code in Drupal 7.
+            $document->language = 'und';
+          }
+          else {
+            $document->language = $node->language;
+          }
+          $document->body = apachesolr_clean_text($file->description) .' '. $text;
+
+          $document->ss_filemime = $file->filemime;
+          $document->ss_file_node_title = apachesolr_clean_text($node->title);
+          $document->ss_file_node_url = url('node/' . $node->nid, array('absolute' => TRUE));
+
+          apachesolr_add_taxonomy_to_document($document, $node);
+
+          // Let modules add to the document.
+          foreach (module_implements('apachesolr_update_index') as $module) {
+            $function = $module .'_apachesolr_update_index';
+            $function($document, $node, $namespace);
+          }
+          drupal_alter('apachesolr_attachment_index', $document, $node, $file, $namespace);
+
+          $documents[] = $document;
+        }
+        else {
+          // Shortened project name because the watchdog limits type to 16 characters.
+          watchdog('ApacheSolrAttach', 'Could not extract any indexable text from %filepath', array('%filepath' => $file->filepath), WATCHDOG_WARNING);
+        }
       }
     }
   }
