/**
  * Index a Database so it can be searched
  * 
  * @param Database $database
  */
 public function indexDatabase(Database $database)
 {
     $this->datamap()->beginTransaction();
     // remove any existing entries
     $delete_sql = 'DELETE FROM research_databases_search WHERE database_id = :id';
     $delete_params = array(':id' => $database->getId());
     $this->datamap()->delete($delete_sql, $delete_params);
     // see which fields we want to index
     // get 'em all
     $fields = $database->toArray();
     foreach ($fields as $field => $value) {
         // this is not the field you're looking for
         if (!in_array($field, $this->searchable_fields)) {
             continue;
         }
         // keyword and the like
         if (is_array($value)) {
             $value = implode(' ', $value);
         }
         $searchable_terms = array();
         foreach (explode(" ", (string) $value) as $term) {
             // only numbers and letters please
             $term = preg_replace('/[^a-zA-Z0-9]/', '', $term);
             $term = trim(strtolower($term));
             // no searchable terms
             if ($term == "") {
                 continue;
             }
             // anything over 50 chars is likley a URL or something
             if (strlen($term) > 50) {
                 continue;
             }
             array_push($searchable_terms, $term);
         }
         // remove duplicate terms
         $searchable_terms = array_unique($searchable_terms);
         // insert em
         $sql = "INSERT INTO research_databases_search ( database_id, field, term ) " . "VALUES ( :database_id, :field, :term )";
         foreach ($searchable_terms as $unique_term) {
             $this->datamap()->insert($sql, array(":database_id" => $database->getId(), ":field" => $field, ":term" => $unique_term));
         }
     }
     $this->datamap()->commit();
 }