Custom content types and fields: how do I set it up properly?
The first step is to create the content type and fields with the built-in UI of Drupal core. There are then several ways to export the configurations into code, but the simplest is probably Features, which will export a fully-functional module for you including all fields and content types you select.

To get your content into nodes of your content type, I'd suggest you create one node with the UI, use devel to look at the structure, then create the same object structure in code, which would look something like this:

$node = new StdClass;
$node-&gt;type = 'content_type;
$node-&gt;field_something = array(
  'und' =&gt; array(
    array(
      'value' =&gt; 'some value',
    ),
  ),
);
node_save($node);


Drupal's search defaults to searching nodes of all types, so that part should just work. Same with theming. You can use permissions (also exportable via Features) to remove the content type from the "Add content" list.