-Mike
At 10:03 AM 10/30/2003, you wrote:
It was posted on lucene-dev, not lucene-user. I've pasted it below.
I will be fixing this at some point in the near future based on this fix and other related ones needed.
Erik
-----
From: Bernhard Messer <[EMAIL PROTECTED]> Date: Wed Oct 29, 2003 11:27:02 AM US/Eastern To: Lucene Developers List <[EMAIL PROTECTED]> Subject: MultiFieldQueryParser, can't change default search operator Reply-To: "Lucene Developers List" <[EMAIL PROTECTED]>
hi all,
just played around with the MultiFieldQueryParser and didn't find a working way to change the "operator" value.
The problem is that MultiFieldQueryParser is implementing two public static methods "parse" only. Calling one of those, in the extended superclass, the static method implementation for "parse" is called. Due to the fact that the QueryParser class creates a new Instance for each call thru the static method, the "operator" flag is simply ignored.
There would be a simple fix within MultiFieldQueryParser class without touching the rest of the system. One have to add a new non static method "parse" which could look like this:
/***********************************************************/ public Query parse(String query, String[] fields) throws ParseException { BooleanQuery bQuery = new BooleanQuery();
for (int i = 0; i < fields.length; i++) { QueryParser parser = new QueryParser(fields[i], analyzer); parser.setOperator(getOperator()); Query q = parser.parse(query); bQuery.add(q, false, false); } return bQuery; } /***********************************************************/
To test the new implementation, following code fragment can be used:
/***********************************************************/
Directory directory = FSDirectory.getDirectory("/tmp/idx-test", false);
Analyzer analyzer = new SimpleAnalyzer();
Searcher searcher = new IndexSearcher(directory);
Hits hits = null;
String[] fields = { "contents", "title" };
MultiFieldQueryParser parser = new MultiFieldQueryParser("britney spears", analyzer);
parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
Query query = parser.parse("britney spears", fields);
System.out.println("Query: " + query.toString());
hits = searcher.search(query);
System.out.println ("Results: " + hits.length()); searcher.close(); /***********************************************************/
best regards
Bernhard
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]