: Hoss - the main caveat with this approach is that a user could select
: a different field from any of the designated text boxes. Putting
: "subject:foo" in the name text box for example.
sorry ... yea, i left out a step...
String words = QueryParser.escape(rawUserInputString)
Generally speaking this approach has been working well for me in my
current development as a bare bones method for converting raw user word
lists into pieces of queries that i then compose into a larger more
complex query structure. the only hitch i've ever really run into is when
people try to search for things like: 42" tv ... becuase query parser
doesn't have any way to escape that quote, so it barfs thinking it's an
unterminated phrase query. but even if there was a way to escape it, i
don't think i'd want to, beause as is it lets the (more common case) of
quoted phrases do what (i) expect and become phrase queries.
I still haven't completley decided what i want to do about the: 42" tv
case ... but i'm very close to preprocessing the input and saying: "even
number of quotes, leave them alone, odd number of quotes, yank them all
out."
: I think this is one of my biggest issues with QueryParser these days,
: it exposes too much power. It's like giving a SQL text box to your
: database application (read-only, of course). There are generally
: fields not made for user querying.
agreed. If i don't take the easy way out on that 42" case, i think I may
spend some time on a generic "UserQueryParser" that doesn't support any
fancy syntax of the exsting QueryParser, and just knows how to build
TermQuery and phrases queries on a specified field -- with options forhow
to deal with uneven numbered quotes (looking at the white space arround
the quotes for guidence in interpreting it)
: > In addition to Erik's suggestion, something that i find frequently
: > makes
: > sense is to use the QueryParser in each case where you are dealing
: > with a
: > discrete "input string" -- and then combine them into a BooleanQuery
: > (along with any other progromatically generated TermQueries you
: > might want
: > for other reasons)
: >
: > For example, it looks like your applciation is targeted at
: > searching email
: > right? let's assume your application allows the user to specify the
: > following inputs
: >
: > * a text box for search words
: > * a text box for people's names/email
: > * pulldowns for picking date ranges
: >
: > ...and you want to look in the subject, body, and attachment fields
: > for
: > the input words (with differnet boosts) and in all of the header
: > fields
: > for the name/email input. you can builda Date object out of the
: > pulldown
: > yourself, and then do something like this with the two strings...
: >
: > QueryParser subP = new QueryParser("subject",SomeAnalyzer)
: > QueryParser bodyP = new QueryParser("body",SomeAnalyzer)
: > QueryParser attachP = new QueryParser("attachemnts",SomeAnalyzer)
: > QueryParser headP = new QueryParser
: > ("headers",AnalyzerThatKnowsAboutEmailAddress)
: > Query s = subP.parse(words);
: > s.setBoost(2.0)
: > Query b = bodyP.parse(words);
: > Query a = attachP.parse(words);
: > a.setBoost(0.5)
: > Query h = headP.parse(person);
: > h.setBoost(1.5)
: > BooleanQuery bq = new BooleanQuery();
: > bq.add(s,false,false);
: > bq.add(b,false,false);
: > bq.add(a,false,false);
: > bq.add(h,false,false);
: >
: > ...and then execute your search using a filter built from the date
: > range
: > pulldowns.
: >
: >
: > -Hoss
: >
: >
: > ---------------------------------------------------------------------
: > To unsubscribe, e-mail: [EMAIL PROTECTED]
: > For additional commands, e-mail: [EMAIL PROTECTED]
:
:
: ---------------------------------------------------------------------
: To unsubscribe, e-mail: [EMAIL PROTECTED]
: For additional commands, e-mail: [EMAIL PROTECTED]
:
-Hoss
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]