Interesting, in the case where you use quotes... : +<result name="response" numFound="6888" start="0" maxScore="3.0879765"> ... : </lst><str name="rawquerystring">"asuntojen hinnat"</str> : <str name="querystring">"asuntojen hinnat"</str>
...there is one DisjunctionMaxQuery (expected) for the entire phrase, but in the sub-clauses for each individual field the clauses coming from your "_fi" fields are just building boolean "OR" queries of the terms from your phrase (instead of building an actual phrase query... : <str name="parsedquery">+DisjunctionMaxQuery((table.title_t:"asuntojen : hinnat"^2.0 | title_t:"asuntojen hinnat"^2.0 | ingress_t:"asuntojen hinnat" | : (text_fi:asunto text_fi:hinta) | (table.description_fi:asunto : table.description_fi:hinta) | table.description_t:"asuntojen hinnat" | : graphic.title_t:"asuntojen hinnat"^2.0 | ((graphic.title_fi:asunto : graphic.title_fi:hinta)^2.0) | ((table.title_fi:asunto : table.title_fi:hinta)^2.0) | table.contents_t:"asuntojen hinnat" | : text_t:"asuntojen hinnat" | (ingress_fi:asunto ingress_fi:hinta) | : (table.contents_fi:asunto table.contents_fi:hinta) | ((title_fi:asunto : title_fi:hinta)^2.0))~0.01) () type:tie^6.0 type:kuv^2.0 type:tau^2.0 : FunctionQuery((1.0/(3.16E-11*float(ms(const(1319437912691),date(date.modified_dt)))+1.0))^100.0)</str> ...is this perhaps a side effect of the new autoGeneratePhraseQueries option? ... you are explicitly specifying a quoted phrase, but maybe somehwere in the code path of the dismax parser that information is getting lost? can you post the details of your schema.xml? (ie: the "version" property on the schema file, and the dynamicField/field + fieldType definitions for all these fields) In contrast, your unquoted example is working exactly as i'd expect. a DisjunctionMaxQuery is built for each clause of the input, and the two DisjunctionMaxQuery objects are then combined in a BooleanQuery where the minNrShouldMatch property is set to "2".... : +<result name="response" numFound="1065" start="0" : maxScore="2.230382"></result> ... : <str name="rawquerystring">asuntojen hinnat</str> : <str name="querystring">asuntojen hinnat</str> : : <str name="parsedquery">+((DisjunctionMaxQuery((table.title_t:asuntojen^2.0 | : title_t:asuntojen^2.0 | ingress_t:asuntojen | text_fi:asunto | : table.description_fi:asunto | table.description_t:asuntojen | : graphic.title_t:asuntojen^2.0 | graphic.title_fi:asunto^2.0 | : table.title_fi:asunto^2.0 | table.contents_t:asuntojen | text_t:asuntojen | : ingress_fi:asunto | table.contents_fi:asunto | title_fi:asunto^2.0)~0.01) : DisjunctionMaxQuery((table.title_t:hinnat^2.0 | title_t:hinnat^2.0 | : ingress_t:hinnat | text_fi:hinta | table.description_fi:hinta | : table.description_t:hinnat | graphic.title_t:hinnat^2.0 | : graphic.title_fi:hinta^2.0 | table.title_fi:hinta^2.0 | : table.contents_t:hinnat | text_t:hinnat | ingress_fi:hinta | : table.contents_fi:hinta | title_fi:hinta^2.0)~0.01))~2) () type:tie^6.0 : type:kuv^2.0 type:tau^2.0 : FunctionQuery((1.0/(3.16E-11*float(ms(const(1319438484878),date(date.modified_dt)))+1.0))^100.0)</str> -Hoss