Use a search bar (exposed filter) to search for different node fields
Views with exposed filters, and then a bit of custom js should do the job fine.

Basically loop over the fields that are there and use them to build a select so users can choose which field to search. The existing fields names relate to the query string key that we need to use.

Something like this should suffice:

(function($) {
  Drupal.behaviors.viewsSearchBar = {
    attach: function(context, settings) {

      // Build the HTML for the new field we are adding.
      var newField = '&lt;div class="views-exposed-widget views-widget-filter-combined-search" id="edit-combined-search"&gt;';
      newField += '&lt;input type="text" class="form-text" maxlength="128" size="30" value="" name="combined-search-text" id="combined-search-text"&gt;';
      newField += '&lt;select id="combined-search-field"&gt;';

      // Loop over the existing widgets to add options to our new select.
      $('.views-exposed-widgets .views-exposed-widget').each(function(){

        var title = $(this).find('label').text().trim();
        var value = $(this).find('input').attr('name');

        if(title &amp;&amp; value) {
          newField += '&lt;option value="'+value+'"&gt;'+title+'&lt;/option&gt;';
          // This this widget
          $(this).hide();
        }

      });

      newField += '&lt;/select&gt;&lt;/div&gt;';

      // Add our new field.
      $('.views-exposed-widgets').prepend(newField);

      // Create a submit function for the views search form.
      $('.view-filters form').submit(function(e){

        // Stop the form doing it's default action.
        e.preventDefault();

        // Build the new URL.
        var baseURL = window.location.protocol + '//' + window.location.host + window.location.pathname;
        var field = $('#combined-search-field').val();
        var text = $('#combined-search-text').val();

        // Off we go...
        window.location = baseURL + '?' + field + '=' + text;

      });

    }
  };

})(jQuery);


Further work that needs to be done:


Check if there is already a search argument in the query string and set the default value of the custom search field and select.