Indeed, StandardAnalyzer removing the pluses, so analyse 'c++' to 'c'.
QueryParser include Term that been analysed.
And BooleanQuery include Term that hasn't been analysed.
I think this is the difference between they.



2008/9/4 Ian Lea <[EMAIL PROTECTED]>

> Have a look at the index with Luke to see what has actually been
> indexed. StandardAnalyzer may well be removing the pluses, or you may
> need to escape them.  And watch out for case - Visual != visual in
> term query land.
>
>
> --
> Ian.
>
>
> On Thu, Sep 4, 2008 at 9:46 AM, bogdan71 <[EMAIL PROTECTED]> wrote:
> >
> >  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]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to