: This kinda leads me back to my "best practises" question: If Im building
: up the query dynamically based off of several fields (rather than the
: user entering a Lucene Query), Im kind of wondering If I should be using
: query parser at all...?! I keep feeling that maybe I should just be
: building up the Query programatically (although dynamically) based off
: the fields.
:
: But all the examples I can find seem to transform already split UI
: fields back in to a single lucene query string and then put them through
: a parser.
: However, if I don't use the QueryParser, I guess I've got to manually
: run each field through the appropriate analyser as Im building up the
: query terms.
If you are parsing raw text from the user, and you want that text to
contain instructions (for things like required/prohibited clauses, range
queries, boosts and what not) then you might as well use the QueryParser.
if all of the forms are for very specific purposes (ie: one text box for
required text, one for prohibited text, pulldowns for rnages, etc) then i
wouldn't use the QUeryParser at all -- you've got it right with calling
with using the Analyzer directly.
What you really *DON'T* want to do because it's wastefull, silly, and easy
to get wrong so your users can break it is stuff like this...
String mfgName = getStringFormInput("mfgName")
int maxPrice = getIntFormInput("price");
String query = getStringFormInput("q");
Query q = parser.parse("+(" + query + ") +mfgName:("+mfgName+") "
+ "+maxPrice:[0 TO "+ maxPrice"]");
that is certainly *NOT* a best practice.
The middle ground where things become muddy is when you wnat the user to
be able to specify *some* instrucutions (like require/prohibited clauses
and quoted phrases) but you don't want then specifying boosts, or field
names -- in that case, I think it makes a lot of sense to "partially
escape" their input to eliminate just hte special characters you don't
want to affect them (like "^" and ":") before passing itto the QueryParser
is a perfectly valid approach -- then you can add the resulting Query to a
bigger BooleanQuery along with the other Query objects you've built up
from the form...
Query main = parser.parse(myescape(getStringFormInput("q"))
Query mfg = parser.parse(myescape(getStringFormInput("mfgName"))
Query price = buildPriceQuery(getIntFormInput("price"));
BooleanQuery q = new BooleanQuery();
q.add(main, ...);
q.add(mfg, ...);
q.add(price, ...);
-Hoss
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]