The recent discussion of filter queries has got me thinking about other ways to
improve performance of our app. We have an index with a lot of fields and we
support both single-search-box style queries using DisMax and fielded search
using the standard query handler. We also support using both strategies in the
same search.
For exmaple, a user might enter "Alabama Biotechnology" in the main search box,
triggering a dismax request which returns lots of different types of results.
They may then want to refine their search by selecting a specific industry from
a drop-down box. We handle this by adding a filterquery (fq=) to the original
query. We have dozens of additional fields like this - some with a finite set
of discrete values, some with arbitrary text values. The combinations are
infinite, and I'm worried we will overwhelm the filterCache by supporting all
of these cases as filter queries.
I'm investigating nested queries as an alternative way to support this type of
hybrid-search. It appears that this only works when the top-level request
query is a standard lucene-style query and the nested query is a dismax, and
not the other way arround - correct me if I am wrong here. It also appears
that what is specified in the {!xxx} as the nested query type must be an actual
query type and not the name of a request handler defined in solrconfig.xml.
Thus it would seem that the nested query string must supply all of the default
parameters for a dismax request. Is this correct? Is there another approach
that I am missing? I suppose I could create a new query parser class that
would supply the defaults, but that seems like overkill.
Any comments are welcome, I just want to know that I am not completely off
track and there isn't some really simple way to achieve this that I have
overlooked. Thanks all!
-Ken