TestMixedDirectory.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.contrib.index.lucene;
  19. import java.io.IOException;
  20. import junit.framework.TestCase;
  21. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  22. import org.apache.lucene.document.Document;
  23. import org.apache.lucene.document.Field;
  24. import org.apache.lucene.index.IndexDeletionPolicy;
  25. import org.apache.lucene.index.IndexWriter;
  26. import org.apache.lucene.index.KeepOnlyLastCommitDeletionPolicy;
  27. import org.apache.lucene.index.Term;
  28. import org.apache.lucene.search.Hits;
  29. import org.apache.lucene.search.IndexSearcher;
  30. import org.apache.lucene.search.TermQuery;
  31. import org.apache.lucene.store.Directory;
  32. import org.apache.lucene.store.IndexOutput;
  33. import org.apache.lucene.store.RAMDirectory;
  34. public class TestMixedDirectory extends TestCase {
  35.   private int numDocsPerUpdate = 10;
  36.   private int maxBufferedDocs = 2;
  37.   public void testMixedDirectoryAndPolicy() throws IOException {
  38.     Directory readDir = new RAMDirectory();
  39.     updateIndex(readDir, 0, numDocsPerUpdate,
  40.         new KeepOnlyLastCommitDeletionPolicy());
  41.     verify(readDir, numDocsPerUpdate);
  42.     IndexOutput out =
  43.         readDir.createOutput("_" + (numDocsPerUpdate / maxBufferedDocs + 2)
  44.             + ".cfs");
  45.     out.writeInt(0);
  46.     out.close();
  47.     Directory writeDir = new RAMDirectory();
  48.     Directory mixedDir = new MixedDirectory(readDir, writeDir);
  49.     updateIndex(mixedDir, numDocsPerUpdate, numDocsPerUpdate,
  50.         new MixedDeletionPolicy());
  51.     verify(readDir, numDocsPerUpdate);
  52.     verify(mixedDir, 2 * numDocsPerUpdate);
  53.   }
  54.   public void updateIndex(Directory dir, int base, int numDocs,
  55.       IndexDeletionPolicy policy) throws IOException {
  56.     IndexWriter writer =
  57.         new IndexWriter(dir, false, new StandardAnalyzer(), policy);
  58.     writer.setMaxBufferedDocs(maxBufferedDocs);
  59.     writer.setMergeFactor(1000);
  60.     for (int i = 0; i < numDocs; i++) {
  61.       addDoc(writer, base + i);
  62.     }
  63.     writer.close();
  64.   }
  65.   private void addDoc(IndexWriter writer, int id) throws IOException {
  66.     Document doc = new Document();
  67.     doc.add(new Field("id", String.valueOf(id), Field.Store.YES,
  68.         Field.Index.UN_TOKENIZED));
  69.     doc.add(new Field("content", "apache", Field.Store.NO,
  70.         Field.Index.TOKENIZED));
  71.     writer.addDocument(doc);
  72.   }
  73.   private void verify(Directory dir, int expectedHits) throws IOException {
  74.     IndexSearcher searcher = new IndexSearcher(dir);
  75.     Hits hits = searcher.search(new TermQuery(new Term("content", "apache")));
  76.     int numHits = hits.length();
  77.     assertEquals(expectedHits, numHits);
  78.     int[] docs = new int[numHits];
  79.     for (int i = 0; i < numHits; i++) {
  80.       Document hit = hits.doc(i);
  81.       docs[Integer.parseInt(hit.get("id"))]++;
  82.     }
  83.     for (int i = 0; i < numHits; i++) {
  84.       assertEquals(1, docs[i]);
  85.     }
  86.     searcher.close();
  87.   }
  88. }