You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/05/23 18:12:04 UTC
svn commit: r1126565 [3/3] - in /lucene/dev/branches/flexscoring/lucene: ./
backwards/ contrib/ contrib/ant/ contrib/db/ contrib/lucli/
contrib/misc/src/java/org/apache/lucene/index/
contrib/misc/src/java/org/apache/lucene/store/ contrib/misc/src/test/...
Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java?rev=1126565&r1=1126564&r2=1126565&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java Mon May 23 16:12:02 2011
@@ -17,11 +17,14 @@ package org.apache.lucene.search;
* limitations under the License.
*/
+import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Explanation.IDFExplanation;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef;
@@ -424,7 +427,7 @@ public class TestMultiPhraseQuery extend
mpq.add(new Term[] {new Term("field", "b"), new Term("field", "c")}, 0);
}
TopDocs hits = s.search(mpq, 2);
- assert hits.totalHits == 2;
+ assertEquals(2, hits.totalHits);
assertEquals(hits.scoreDocs[0].score, hits.scoreDocs[1].score, 1e-5);
/*
for(int hit=0;hit<hits.totalHits;hit++) {
@@ -435,4 +438,156 @@ public class TestMultiPhraseQuery extend
r.close();
dir.close();
}
+
+ private final static TokenAndPos[] INCR_0_DOC_TOKENS = new TokenAndPos[] {
+ new TokenAndPos("x", 0),
+ new TokenAndPos("a", 1),
+ new TokenAndPos("1", 1),
+ new TokenAndPos("m", 2), // not existing, relying on slop=2
+ new TokenAndPos("b", 3),
+ new TokenAndPos("1", 3),
+ new TokenAndPos("n", 4), // not existing, relying on slop=2
+ new TokenAndPos("c", 5),
+ new TokenAndPos("y", 6)
+ };
+
+ private final static TokenAndPos[] INCR_0_QUERY_TOKENS_AND = new TokenAndPos[] {
+ new TokenAndPos("a", 0),
+ new TokenAndPos("1", 0),
+ new TokenAndPos("b", 1),
+ new TokenAndPos("1", 1),
+ new TokenAndPos("c", 2)
+ };
+
+ private final static TokenAndPos[][] INCR_0_QUERY_TOKENS_AND_OR_MATCH = new TokenAndPos[][] {
+ { new TokenAndPos("a", 0) },
+ { new TokenAndPos("x", 0), new TokenAndPos("1", 0) },
+ { new TokenAndPos("b", 1) },
+ { new TokenAndPos("x", 1), new TokenAndPos("1", 1) },
+ { new TokenAndPos("c", 2) }
+ };
+
+ private final static TokenAndPos[][] INCR_0_QUERY_TOKENS_AND_OR_NO_MATCHN = new TokenAndPos[][] {
+ { new TokenAndPos("x", 0) },
+ { new TokenAndPos("a", 0), new TokenAndPos("1", 0) },
+ { new TokenAndPos("x", 1) },
+ { new TokenAndPos("b", 1), new TokenAndPos("1", 1) },
+ { new TokenAndPos("c", 2) }
+ };
+
+ /**
+ * using query parser, MPQ will be created, and will not be strict about having all query terms
+ * in each position - one of each position is sufficient (OR logic)
+ */
+ public void testZeroPosIncrSloppyParsedAnd() throws IOException, ParseException {
+ QueryParser qp = new QueryParser(TEST_VERSION_CURRENT, "field", new CannedAnalyzer(INCR_0_QUERY_TOKENS_AND));
+ final Query q = qp.parse("\"this text is acually ignored\"");
+ assertTrue("wrong query type!", q instanceof MultiPhraseQuery);
+ doTestZeroPosIncrSloppy(q, 0);
+ ((MultiPhraseQuery) q).setSlop(1);
+ doTestZeroPosIncrSloppy(q, 0);
+ ((MultiPhraseQuery) q).setSlop(2);
+ doTestZeroPosIncrSloppy(q, 1);
+ }
+
+ private void doTestZeroPosIncrSloppy(Query q, int nExpected) throws IOException {
+ Directory dir = newDirectory(); // random dir
+ IndexWriterConfig cfg = newIndexWriterConfig(TEST_VERSION_CURRENT, new CannedAnalyzer(INCR_0_DOC_TOKENS));
+ IndexWriter writer = new IndexWriter(dir, cfg);
+ Document doc = new Document();
+ doc.add(new Field("field", "", Field.Store.NO, Field.Index.ANALYZED));
+ writer.addDocument(doc);
+ IndexReader r = IndexReader.open(writer,false);
+ writer.close();
+ IndexSearcher s = new IndexSearcher(r);
+
+ if (VERBOSE) {
+ System.out.println("QUERY=" + q);
+ }
+
+ TopDocs hits = s.search(q, 1);
+ assertEquals("wrong number of results", nExpected, hits.totalHits);
+
+ if (VERBOSE) {
+ for(int hit=0;hit<hits.totalHits;hit++) {
+ ScoreDoc sd = hits.scoreDocs[hit];
+ System.out.println(" hit doc=" + sd.doc + " score=" + sd.score);
+ }
+ }
+
+ r.close();
+ dir.close();
+ }
+
+ /**
+ * PQ AND Mode - Manually creating a phrase query
+ */
+ public void testZeroPosIncrSloppyPqAnd() throws IOException, ParseException {
+ final PhraseQuery pq = new PhraseQuery();
+ for (TokenAndPos tap : INCR_0_QUERY_TOKENS_AND) {
+ pq.add(new Term("field",tap.token), tap.pos);
+ }
+ doTestZeroPosIncrSloppy(pq, 0);
+ pq.setSlop(1);
+ doTestZeroPosIncrSloppy(pq, 0);
+ pq.setSlop(2);
+ doTestZeroPosIncrSloppy(pq, 1);
+ }
+
+ /**
+ * MPQ AND Mode - Manually creating a multiple phrase query
+ */
+ public void testZeroPosIncrSloppyMpqAnd() throws IOException, ParseException {
+ final MultiPhraseQuery mpq = new MultiPhraseQuery();
+ for (TokenAndPos tap : INCR_0_QUERY_TOKENS_AND) {
+ mpq.add(new Term[]{new Term("field",tap.token)}, tap.pos); //AND logic
+ }
+ doTestZeroPosIncrSloppy(mpq, 0);
+ mpq.setSlop(1);
+ doTestZeroPosIncrSloppy(mpq, 0);
+ mpq.setSlop(2);
+ doTestZeroPosIncrSloppy(mpq, 1);
+ }
+
+ /**
+ * MPQ Combined AND OR Mode - Manually creating a multiple phrase query
+ */
+ public void testZeroPosIncrSloppyMpqAndOrMatch() throws IOException, ParseException {
+ final MultiPhraseQuery mpq = new MultiPhraseQuery();
+ for (TokenAndPos tap[] : INCR_0_QUERY_TOKENS_AND_OR_MATCH) {
+ Term[] terms = tapTerms(tap);
+ final int pos = tap[0].pos;
+ mpq.add(terms, pos); //AND logic in pos, OR across lines
+ }
+ doTestZeroPosIncrSloppy(mpq, 0);
+ mpq.setSlop(1);
+ doTestZeroPosIncrSloppy(mpq, 0);
+ mpq.setSlop(2);
+ doTestZeroPosIncrSloppy(mpq, 1);
+ }
+
+ /**
+ * MPQ Combined AND OR Mode - Manually creating a multiple phrase query - with no match
+ */
+ public void testZeroPosIncrSloppyMpqAndOrNoMatch() throws IOException, ParseException {
+ final MultiPhraseQuery mpq = new MultiPhraseQuery();
+ for (TokenAndPos tap[] : INCR_0_QUERY_TOKENS_AND_OR_NO_MATCHN) {
+ Term[] terms = tapTerms(tap);
+ final int pos = tap[0].pos;
+ mpq.add(terms, pos); //AND logic in pos, OR across lines
+ }
+ doTestZeroPosIncrSloppy(mpq, 0);
+ mpq.setSlop(2);
+ doTestZeroPosIncrSloppy(mpq, 0);
+ }
+
+ private Term[] tapTerms(TokenAndPos[] tap) {
+ Term[] terms = new Term[tap.length];
+ for (int i=0; i<terms.length; i++) {
+ terms[i] = new Term("field",tap[i].token);
+ }
+ return terms;
+ }
+
}
+
Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestTermScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestTermScorer.java?rev=1126565&r1=1126564&r2=1126565&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestTermScorer.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/TestTermScorer.java Mon May 23 16:12:02 2011
@@ -65,6 +65,7 @@ public class TestTermScorer extends Luce
indexSearcher.close();
indexReader.close();
directory.close();
+ super.tearDown();
}
public void test() throws IOException {
Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java?rev=1126565&r1=1126564&r2=1126565&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java Mon May 23 16:12:02 2011
@@ -345,12 +345,6 @@ public class TestBufferedIndexInput exte
dir.deleteFile(name);
}
@Override
- public void touchFile(String name)
- throws IOException
- {
- dir.touchFile(name);
- }
- @Override
public long fileModified(String name)
throws IOException
{
Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/TestMinimize.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/TestMinimize.java?rev=1126565&r1=1126564&r2=1126565&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/TestMinimize.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/TestMinimize.java Mon May 23 16:12:02 2011
@@ -49,4 +49,9 @@ public class TestMinimize extends Lucene
assertEquals(a.getNumberOfTransitions(), b.getNumberOfTransitions());
}
}
+
+ /** n^2 space usage in Hopcroft minimization? */
+ public void testMinimizeHuge() {
+ new RegExp("+-*(A|.....|BC)*]", RegExp.NONE).toAutomaton();
+ }
}
Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/fst/TestFSTs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/fst/TestFSTs.java?rev=1126565&r1=1126564&r2=1126565&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/fst/TestFSTs.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/util/automaton/fst/TestFSTs.java Mon May 23 16:12:02 2011
@@ -54,14 +54,16 @@ public class TestFSTs extends LuceneTest
private MockDirectoryWrapper dir;
@Override
- public void setUp() throws IOException {
+ public void setUp() throws Exception {
+ super.setUp();
dir = newDirectory();
dir.setPreventDoubleWrite(false);
}
@Override
- public void tearDown() throws IOException {
+ public void tearDown() throws Exception {
dir.close();
+ super.tearDown();
}
private static BytesRef toBytesRef(IntsRef ir) {
@@ -538,7 +540,7 @@ public class TestFSTs extends LuceneTest
Object output = run(fst, term, null);
assertNotNull("term " + inputToString(inputMode, term) + " is not accepted", output);
- assertEquals(output, pair.output);
+ assertEquals(pair.output, output);
// verify enum's next
IntsRefFSTEnum.InputOutput<T> t = fstEnum.next();