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 2012/06/13 14:30:54 UTC

svn commit: r1349795 - /lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java

Author: rmuir
Date: Wed Jun 13 12:30:54 2012
New Revision: 1349795

URL: http://svn.apache.org/viewvc?rev=1349795&view=rev
Log:
add stress test for postings reader

Added:
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java   (with props)

Added: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java?rev=1349795&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java (added)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java Wed Jun 13 12:30:54 2012
@@ -0,0 +1,122 @@
+package org.apache.lucene.codecs.lucene40;
+
+/*
+ * 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.util.ArrayList;
+import java.util.Collections;
+
+import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.codecs.Codec;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.document.FieldType;
+import org.apache.lucene.document.StringField;
+import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
+
+public class TestLucene40PostingsReader extends LuceneTestCase {
+  static final String terms[] = new String[100];
+  static {
+    for (int i = 0; i < terms.length; i++) {
+      terms[i] = Integer.toString(i+1);
+    }
+  }
+
+  /** tests terms with different probabilities of being in the document.
+   *  depends heavily on term vectors cross-check at checkIndex
+   */
+  public void testPostings() throws Exception {
+    Directory dir = newFSDirectory(_TestUtil.getTempDir("postings"));
+    IndexWriterConfig iwc = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
+    iwc.setCodec(Codec.forName("Lucene40"));
+    RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
+    
+    Document doc = new Document();
+    
+    // id field
+    FieldType idType = new FieldType(StringField.TYPE_NOT_STORED);
+    idType.setStoreTermVectors(true);
+    Field idField = new Field("id", "", idType);
+    doc.add(idField);
+    
+    // title field: short text field
+    FieldType titleType = new FieldType(TextField.TYPE_NOT_STORED);
+    titleType.setStoreTermVectors(true);
+    titleType.setStoreTermVectorPositions(true);
+    titleType.setStoreTermVectorOffsets(true);
+    titleType.setIndexOptions(indexOptions());
+    Field titleField = new Field("title", "", titleType);
+    doc.add(titleField);
+    
+    // body field: long text field
+    FieldType bodyType = new FieldType(TextField.TYPE_NOT_STORED);
+    bodyType.setStoreTermVectors(true);
+    bodyType.setStoreTermVectorPositions(true);
+    bodyType.setStoreTermVectorOffsets(true);
+    bodyType.setIndexOptions(indexOptions());
+    Field bodyField = new Field("body", "", bodyType);
+    doc.add(bodyField);
+    
+    int numDocs = atLeast(1000);
+    for (int i = 0; i < numDocs; i++) {
+      idField.setStringValue(Integer.toString(i));
+      titleField.setStringValue(fieldValue(1));
+      bodyField.setStringValue(fieldValue(3));
+      iw.addDocument(doc);
+      if (random().nextInt(20) == 0) {
+        iw.deleteDocuments(new Term("id", Integer.toString(i)));
+      }
+    }
+    iw.close();
+    dir.close(); // checkindex
+  }
+  
+  IndexOptions indexOptions() {
+    switch(random().nextInt(4)) {
+      case 0: return IndexOptions.DOCS_ONLY;
+      case 1: return IndexOptions.DOCS_AND_FREQS;
+      case 2: return IndexOptions.DOCS_AND_FREQS_AND_POSITIONS;
+      default: return IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS;
+    }
+  }
+  
+  String fieldValue(int maxTF) {
+    ArrayList<String> shuffled = new ArrayList<String>();
+    StringBuilder sb = new StringBuilder();
+    int i = random().nextInt(terms.length);
+    while (i < terms.length) {
+      int tf =  _TestUtil.nextInt(random(), 1, maxTF);
+      for (int j = 0; j < tf; j++) {
+        shuffled.add(terms[i]);
+      }
+      i++;
+    }
+    Collections.shuffle(shuffled, random());
+    for (String term : shuffled) {
+      sb.append(term);
+      sb.append(' ');
+    }
+    return sb.toString();
+  }
+}