DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24265>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24265

MultiFieldQueryParser, can't change default search operator

           Summary: MultiFieldQueryParser, can't change default search
                    operator
           Product: Lucene
           Version: 1.0.2
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: QueryParser
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Bug detected by Bernhard, submitted via Christoph

bug occured with 1.3 rc2

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]

Reply via email to