Here is a follow-up to a previous message I posted, dealing with converting user-entered boolean logic into a Query. Why does the QueryParser construct the same query for the following two strings?
"apple AND orange OR pear AND grape" "apple AND orange AND pear AND grape" I think a user's expectation would be that the first query matches things containing apple and orange, or containing pear and grape. And that the second query would only match things containing all four items. However, the same query is constructed both times (the constructed query requires all four). package collective.search.lucene.tests; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Query; import junit.framework.TestCase; public class QPTest extends TestCase { public QPTest(String arg0) { super(arg0); } private void display(String s, Query q) { System.out.println("\"" + s + "\" = \"" + q.toString() + "\""); } public void testBooleanConstruction() throws ParseException { String test1 = "apple AND orange OR pear AND grape"; String test2 = "apple AND orange AND pear AND grape"; QueryParser qp = new QueryParser("df", new StandardAnalyzer()); Query query1 = qp.parse(test1); Query query2 = qp.parse(test2); display(test1, query1); display(test2, query2); } }