Hello,

  I am experiencing a strange behaviour when trying to query the same thing
via
BooleanQuery vs. via the know-it-all QueryParser class. Precisely, the index
contains
the document:
   "12,Visual C++,4.2" with the field layout: ID,name,version(thus, "12" is
the ID field, "Visual C++"
is the name field and "4.2" is the version field). 
  The search string is "Visual C++" for the name field.

  The following test, using QueryParser, goes fine:

public final void testUsingQueryParser()
        {
                IndexSearcher recordSearcher;
                Query q;
                QueryParser parser = new QueryParser("name", new 
StandardAnalyzer());
                try
                {
                       q = parser.parse("name:visual +name:c++");
                    
                        Directory directory =
FSDirectory.getDirectory(<some_path_to_index>); 
                        recordSearcher = new IndexSearcher(directory);  
                        
                        Hits h = recordSearcher.search(q);
                        
                        assertEquals(1, h.length());
                        assertEquals(12, Integer.parseInt(h.doc(0).get("ID")));
                }
                catch(Exception exn)
                {
                        fail("Exception occurred.");
                }
        }

  But this one, using a BooleanQuery, fails.

public final void testUsingTermQuery()
        {
                IndexSearcher recordSearcher;
                BooleanQuery bq = new BooleanQuery();
                
                bq.add(new TermQuery(new Term("name", "visual")),
BooleanClause.Occur.SHOULD);
                bq.add(new TermQuery(new Term("name", "c++")), 
BooleanClause.Occur.MUST);
                
                try
                {   
                        Directory directory =
FSDirectory.getDirectory(<some_path_to_index>); 
                        recordSearcher = new IndexSearcher(directory);  
                        
                        Hits h = recordSearcher.search(bq);
                        
                        assertEquals(1, h.length());   // fails, saying it 
expects 0 !!!
                        assertEquals(12, Integer.parseInt(h.doc(0).get("ID")));
                }
                catch(Exception exn)
                {
                        fail("Eexception occurred.");
                }       
        }

   Rewriting the BooleanQuery and taking toString() yields the same String
given to QueryParser.parse() in the first test. I am using Lucene 2.3.0. Can
somebody explain the difference ?
-- 
View this message in context: 
http://www.nabble.com/QueryParser-vs.-BooleanQuery-tp19306087p19306087.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to