pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / src / test / org / apache / lucene / search / TestBooleanOr.java
diff --git a/lucene-java-3.5.0/lucene/src/test/org/apache/lucene/search/TestBooleanOr.java b/lucene-java-3.5.0/lucene/src/test/org/apache/lucene/search/TestBooleanOr.java
new file mode 100644 (file)
index 0000000..169cae1
--- /dev/null
@@ -0,0 +1,168 @@
+package org.apache.lucene.search;
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.IOException;
+
+import org.apache.lucene.util.LuceneTestCase;
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.store.Directory;
+
+public class TestBooleanOr extends LuceneTestCase {
+
+  private static String FIELD_T = "T";
+  private static String FIELD_C = "C";
+
+  private TermQuery t1 = new TermQuery(new Term(FIELD_T, "files"));
+  private TermQuery t2 = new TermQuery(new Term(FIELD_T, "deleting"));
+  private TermQuery c1 = new TermQuery(new Term(FIELD_C, "production"));
+  private TermQuery c2 = new TermQuery(new Term(FIELD_C, "optimize"));
+
+  private IndexSearcher searcher = null;
+  private Directory dir;
+  private IndexReader reader;
+  
+
+  private int search(Query q) throws IOException {
+    QueryUtils.check(random, q,searcher);
+    return searcher.search(q, null, 1000).totalHits;
+  }
+
+  public void testElements() throws IOException {
+    assertEquals(1, search(t1));
+    assertEquals(1, search(t2));
+    assertEquals(1, search(c1));
+    assertEquals(1, search(c2));
+  }
+
+  /**
+   * <code>T:files T:deleting C:production C:optimize </code>
+   * it works.
+   *
+   * @throws IOException
+   */
+  public void testFlat() throws IOException {
+    BooleanQuery q = new BooleanQuery();
+    q.add(new BooleanClause(t1, BooleanClause.Occur.SHOULD));
+    q.add(new BooleanClause(t2, BooleanClause.Occur.SHOULD));
+    q.add(new BooleanClause(c1, BooleanClause.Occur.SHOULD));
+    q.add(new BooleanClause(c2, BooleanClause.Occur.SHOULD));
+    assertEquals(1, search(q));
+  }
+
+  /**
+   * <code>(T:files T:deleting) (+C:production +C:optimize)</code>
+   * it works.
+   *
+   * @throws IOException
+   */
+  public void testParenthesisMust() throws IOException {
+    BooleanQuery q3 = new BooleanQuery();
+    q3.add(new BooleanClause(t1, BooleanClause.Occur.SHOULD));
+    q3.add(new BooleanClause(t2, BooleanClause.Occur.SHOULD));
+    BooleanQuery q4 = new BooleanQuery();
+    q4.add(new BooleanClause(c1, BooleanClause.Occur.MUST));
+    q4.add(new BooleanClause(c2, BooleanClause.Occur.MUST));
+    BooleanQuery q2 = new BooleanQuery();
+    q2.add(q3, BooleanClause.Occur.SHOULD);
+    q2.add(q4, BooleanClause.Occur.SHOULD);
+    assertEquals(1, search(q2));
+  }
+
+  /**
+   * <code>(T:files T:deleting) +(C:production C:optimize)</code>
+   * not working. results NO HIT.
+   *
+   * @throws IOException
+   */
+  public void testParenthesisMust2() throws IOException {
+    BooleanQuery q3 = new BooleanQuery();
+    q3.add(new BooleanClause(t1, BooleanClause.Occur.SHOULD));
+    q3.add(new BooleanClause(t2, BooleanClause.Occur.SHOULD));
+    BooleanQuery q4 = new BooleanQuery();
+    q4.add(new BooleanClause(c1, BooleanClause.Occur.SHOULD));
+    q4.add(new BooleanClause(c2, BooleanClause.Occur.SHOULD));
+    BooleanQuery q2 = new BooleanQuery();
+    q2.add(q3, BooleanClause.Occur.SHOULD);
+    q2.add(q4, BooleanClause.Occur.MUST);
+    assertEquals(1, search(q2));
+  }
+
+  /**
+   * <code>(T:files T:deleting) (C:production C:optimize)</code>
+   * not working. results NO HIT.
+   *
+   * @throws IOException
+   */
+  public void testParenthesisShould() throws IOException {
+    BooleanQuery q3 = new BooleanQuery();
+    q3.add(new BooleanClause(t1, BooleanClause.Occur.SHOULD));
+    q3.add(new BooleanClause(t2, BooleanClause.Occur.SHOULD));
+    BooleanQuery q4 = new BooleanQuery();
+    q4.add(new BooleanClause(c1, BooleanClause.Occur.SHOULD));
+    q4.add(new BooleanClause(c2, BooleanClause.Occur.SHOULD));
+    BooleanQuery q2 = new BooleanQuery();
+    q2.add(q3, BooleanClause.Occur.SHOULD);
+    q2.add(q4, BooleanClause.Occur.SHOULD);
+    assertEquals(1, search(q2));
+  }
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+
+    //
+    dir = newDirectory();
+
+
+    //
+    RandomIndexWriter writer = new RandomIndexWriter(random, dir);
+
+    //
+    Document d = new Document();
+    d.add(newField(
+        FIELD_T,
+        "Optimize not deleting all files",
+        Field.Store.YES,
+        Field.Index.ANALYZED));
+    d.add(newField(
+        FIELD_C,
+        "Deleted When I run an optimize in our production environment.",
+        Field.Store.YES,
+        Field.Index.ANALYZED));
+
+    //
+    writer.addDocument(d);
+
+    reader = writer.getReader();
+    //
+    searcher = newSearcher(reader);
+    writer.close();
+  }
+
+  @Override
+  public void tearDown() throws Exception {
+    searcher.close();
+    reader.close();
+    dir.close();
+    super.tearDown();
+  }
+}