Hmmm, tricky. I think you've uncovered an algorithmic flaw in DisMax. Consider 2 fields, f1, f2 and 2 terms foo and bar. For illustration purposes, here is a query that's structurally equivalent (assuming mm=100% of terms must match):
+(f1:foo OR f2:foo) +(f1:bar OR f2:bar) OK, so it says that "foo" must appear in either field and "bar" must appear in either field. So far so good. Now consider what happens if "bar" is a stopword for f1... the query becomes +(f1:foo OR f2:foo) +(f2:bar) Oops, now this query is saying that bar *must* appear in f2... it's more restrictive than the first query. It appears that dismax is a bit broken when some of the fields have stopwords and some don't. Offhand, I don't see an easy fix for this problem. -Yonik On Fri, Oct 3, 2008 at 5:44 PM, Jon Drukman <[EMAIL PROTECTED]> wrote: > i have a document with the following field > > <name>Saying goodbye to Norman</name> > > if i search for "saying goodbye to norman" with the standard query, it works > fine. if i specify dismax, however, it does not match. here's the output > of debugQuery, which I don't understand at all: > > <str name="rawquerystring">saying goodbye to norman</str> > <str name="querystring">saying goodbye to norman</str> > <str name="parsedquery">+((DisjunctionMaxQuery((user_name:saying^0.4 | > description:say | tags:say^0.5 | misc:say^0.3 | group_name:say^1.5 | > location:saying^0.6 | name:say^1.5)~0.01) > DisjunctionMaxQuery((user_name:goodbye^0.4 | description:goodby | > tags:goodby^0.5 | misc:goodby^0.3 | group_name:goodby^1.5 | > location:goodbye^0.6 | name:goodby^1.5)~0.01) > DisjunctionMaxQuery((user_name:to^0.4 | location:to^0.6)~0.01) > DisjunctionMaxQuery((user_name:norman^0.4 | description:norman | > tags:norman^0.5 | misc:norman^0.3 | group_name:norman^1.5 | > location:norman^0.6 | name:norman^1.5)~0.01))~4) > DisjunctionMaxQuery((description:"say goodby norman"~100 | group_name:"say > goodby norman"~100^1.5 | name:"say goodby norman"~100^1.5)~0.01)</str> > <str name="parsedquery_toString">+(((user_name:saying^0.4 | description:say > | tags:say^0.5 | misc:say^0.3 | group_name:say^1.5 | location:saying^0.6 | > name:say^1.5)~0.01 (user_name:goodbye^0.4 | description:goodby | > tags:goodby^0.5 | misc:goodby^0.3 | group_name:goodby^1.5 | > location:goodbye^0.6 | name:goodby^1.5)~0.01 (user_name:to^0.4 | > location:to^0.6)~0.01 (user_name:norman^0.4 | description:norman | > tags:norman^0.5 | misc:norman^0.3 | group_name:norman^1.5 | > location:norman^0.6 | name:norman^1.5)~0.01)~4) (description:"say goodby > norman"~100 | group_name:"say goodby norman"~100^1.5 | name:"say goodby > norman"~100^1.5)~0.01</str> > > > > it works fine if I search for "say goodbye" or "saying goodbye" or "saying > goodbye norman". how can i get it to do exact matches (which should score > very high)? > > > -jsd- > >