It is possible but...
1) First, check http://wiki.apache.org/solr/SurroundQueryParser (http://searchhub.org/2009/02/22/exploring-query-parsers/) for surround query parser. It is almost exactly what you want. However, people claim (at least in some places) that it supports phrase queries but that is not true (yet).
2) So you have to implement the phrase proximity. A (nasty) hack is to update DistanceQuery::getSpanNearQuery (Line 78 in solr 4.2.1 in lucene/queryparser/.../DistanceQuery.java)
while (sqi.hasNext()) {
SpanNearClauseFactory sncf = new SpanNearClauseFactory(reader, fieldName, qf);
// HACK starts here
DistanceSubQuery dsq = ((DistanceSubQuery)sqi.next());
try {
if ( ((SrndTermQuery)dsq).getTermText().contains( " " ) ) {
String term_text = ((SrndTermQuery)dsq).getTermText();
String[] tokens = term_text.split("\\s+");
SpanQuery[] span_queries = new SpanQuery[tokens.length];
for ( int i = 0; i < tokens.length; ++i ) {
span_queries[i] = new SpanTermQuery( new Term(fieldName, tokens[i]) );
}
spanClauses[qi] = new SpanNearQuery( span_queries, 0, true);
qi++;
continue;
}
}catch( Exception ex ){
}
// HACK ends here
dsq.addSpanQueries(sncf);
3) And be careful that there is no preprocessing of the data so if you use stemming you have to search for exact the words e.g., select?q={!surround df=text}"we defin" 11w "descend" will match
"""
we define a set of words sorted in descending
"""