Search API Solr: How to index fulltext fields with and without stemming?
Good question, and also a topic that should probably be brought up as a feature request for both Apache Solr Integration and Search API Solr at some point. Searching both stemmed and unstemmed content can often lead to significantly better results.

For Search API Solr, there's no way to do this without modifying the schema.xml bundled with the module. But you're probably already aware of that since you're using stemming and the bundled schema does not have stemming enabled by default.

The key to doing this without lots copyField definitions is to use a combination of dynamicField and copyField. You'll also need two different fieldType definitions, one for unstemmed and one for stemmed text.

Try these steps:


Duplicate the entire definition for &lt;fieldType name="text"&gt; as
&lt;fieldType name="stemmed_text"&gt; and uncomment the
SnowballPorterFilterFactory filter.
Add a dynamicField definition using this new fieldType. The data
does not need to be stored, only indexed. 
Example: &lt;dynamicField name="stemmed_*" type="stemmed_text" termVectors="true" stored="false" /&gt;
Add a wildcard copyField definition that copies all text fields into
corresponding stemmed text fields.
Example: &lt;copyField source="t_*" dest="stemmed_*" /&gt;
Reindex.
Add "qf" params to the Solr query for all stemmed fields you want to
search. You can do this via hook_search_api_solr_query_alter(). If
you want all text fields, you can look for field names prefixed with
"t_".


Bonus: Sometimes it helps to boost matches against the unstemmed field in order to make more exact results appear first. You can add boost factors to the field names in the qf param.

Bonus #2: The pf param ("phrase field") is another good way to boost exact matches. This lets you give priority to results where terms are in the same order as what the user entered.

Apache Solr Integration module:

For those using apachesolr.module, matching against both stemmed/unstemmed can be done without changing schema.xml. The bundled schema includes lots of dynamicFields and is quite flexible. By default, searchable fields are stemmed. You can simply copy content fields to unstemmed dynamicFields in hook_apachesolr_index_documents_alter() and then add "qf" params for those fields via hook_apachesolr_query_alter().