⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testparallelreader.java

📁 lucene2.2.0版本
💻 JAVA
字号:
package org.apache.lucene.index;/** * 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 java.util.Arrays;import java.util.Collection;import junit.framework.TestCase;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.MapFieldSelector;import org.apache.lucene.search.BooleanQuery;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.Searcher;import org.apache.lucene.search.TermQuery;import org.apache.lucene.search.BooleanClause.Occur;import org.apache.lucene.store.Directory;import org.apache.lucene.store.RAMDirectory;import org.apache.lucene.store.MockRAMDirectory;public class TestParallelReader extends TestCase {  private Searcher parallel;  private Searcher single;    protected void setUp() throws Exception {    single = single();    parallel = parallel();  }  public void testQueries() throws Exception {    queryTest(new TermQuery(new Term("f1", "v1")));    queryTest(new TermQuery(new Term("f1", "v2")));    queryTest(new TermQuery(new Term("f2", "v1")));    queryTest(new TermQuery(new Term("f2", "v2")));    queryTest(new TermQuery(new Term("f3", "v1")));    queryTest(new TermQuery(new Term("f3", "v2")));    queryTest(new TermQuery(new Term("f4", "v1")));    queryTest(new TermQuery(new Term("f4", "v2")));    BooleanQuery bq1 = new BooleanQuery();    bq1.add(new TermQuery(new Term("f1", "v1")), Occur.MUST);    bq1.add(new TermQuery(new Term("f4", "v1")), Occur.MUST);    queryTest(bq1);  }  public void testFieldNames() throws Exception {    Directory dir1 = getDir1();    Directory dir2 = getDir2();    ParallelReader pr = new ParallelReader();    pr.add(IndexReader.open(dir1));    pr.add(IndexReader.open(dir2));    Collection fieldNames = pr.getFieldNames(IndexReader.FieldOption.ALL);    assertEquals(4, fieldNames.size());    assertTrue(fieldNames.contains("f1"));    assertTrue(fieldNames.contains("f2"));    assertTrue(fieldNames.contains("f3"));    assertTrue(fieldNames.contains("f4"));  }    public void testDocument() throws IOException {    Directory dir1 = getDir1();    Directory dir2 = getDir2();    ParallelReader pr = new ParallelReader();    pr.add(IndexReader.open(dir1));    pr.add(IndexReader.open(dir2));    Document doc11 = pr.document(0, new MapFieldSelector(new String[] {"f1"}));    Document doc24 = pr.document(1, new MapFieldSelector(Arrays.asList(new String[] {"f4"})));    Document doc223 = pr.document(1, new MapFieldSelector(new String[] {"f2", "f3"}));        assertEquals(1, doc11.getFields().size());    assertEquals(1, doc24.getFields().size());    assertEquals(2, doc223.getFields().size());        assertEquals("v1", doc11.get("f1"));    assertEquals("v2", doc24.get("f4"));    assertEquals("v2", doc223.get("f2"));    assertEquals("v2", doc223.get("f3"));  }    public void testIncompatibleIndexes() throws IOException {    // two documents:    Directory dir1 = getDir1();    // one document only:    Directory dir2 = new MockRAMDirectory();    IndexWriter w2 = new IndexWriter(dir2, new StandardAnalyzer(), true);    Document d3 = new Document();    d3.add(new Field("f3", "v1", Field.Store.YES, Field.Index.TOKENIZED));    w2.addDocument(d3);    w2.close();        ParallelReader pr = new ParallelReader();    pr.add(IndexReader.open(dir1));    try {      pr.add(IndexReader.open(dir2));      fail("didn't get exptected exception: indexes don't have same number of documents");    } catch (IllegalArgumentException e) {      // expected exception    }  }  private void queryTest(Query query) throws IOException {    Hits parallelHits = parallel.search(query);    Hits singleHits = single.search(query);    assertEquals(parallelHits.length(), singleHits.length());    for(int i = 0; i < parallelHits.length(); i++) {      assertEquals(parallelHits.score(i), singleHits.score(i), 0.001f);      Document docParallel = parallelHits.doc(i);      Document docSingle = singleHits.doc(i);      assertEquals(docParallel.get("f1"), docSingle.get("f1"));      assertEquals(docParallel.get("f2"), docSingle.get("f2"));      assertEquals(docParallel.get("f3"), docSingle.get("f3"));      assertEquals(docParallel.get("f4"), docSingle.get("f4"));    }  }  // Fiels 1-4 indexed together:  private Searcher single() throws IOException {    Directory dir = new MockRAMDirectory();    IndexWriter w = new IndexWriter(dir, new StandardAnalyzer(), true);    Document d1 = new Document();    d1.add(new Field("f1", "v1", Field.Store.YES, Field.Index.TOKENIZED));    d1.add(new Field("f2", "v1", Field.Store.YES, Field.Index.TOKENIZED));    d1.add(new Field("f3", "v1", Field.Store.YES, Field.Index.TOKENIZED));    d1.add(new Field("f4", "v1", Field.Store.YES, Field.Index.TOKENIZED));    w.addDocument(d1);    Document d2 = new Document();    d2.add(new Field("f1", "v2", Field.Store.YES, Field.Index.TOKENIZED));    d2.add(new Field("f2", "v2", Field.Store.YES, Field.Index.TOKENIZED));    d2.add(new Field("f3", "v2", Field.Store.YES, Field.Index.TOKENIZED));    d2.add(new Field("f4", "v2", Field.Store.YES, Field.Index.TOKENIZED));    w.addDocument(d2);    w.close();    return new IndexSearcher(dir);  }  // Fields 1 & 2 in one index, 3 & 4 in other, with ParallelReader:  private Searcher parallel() throws IOException {    Directory dir1 = getDir1();    Directory dir2 = getDir2();    ParallelReader pr = new ParallelReader();    pr.add(IndexReader.open(dir1));    pr.add(IndexReader.open(dir2));    return new IndexSearcher(pr);  }  private Directory getDir1() throws IOException {    Directory dir1 = new MockRAMDirectory();    IndexWriter w1 = new IndexWriter(dir1, new StandardAnalyzer(), true);    Document d1 = new Document();    d1.add(new Field("f1", "v1", Field.Store.YES, Field.Index.TOKENIZED));    d1.add(new Field("f2", "v1", Field.Store.YES, Field.Index.TOKENIZED));    w1.addDocument(d1);    Document d2 = new Document();    d2.add(new Field("f1", "v2", Field.Store.YES, Field.Index.TOKENIZED));    d2.add(new Field("f2", "v2", Field.Store.YES, Field.Index.TOKENIZED));    w1.addDocument(d2);    w1.close();    return dir1;  }  private Directory getDir2() throws IOException {    Directory dir2 = new RAMDirectory();    IndexWriter w2 = new IndexWriter(dir2, new StandardAnalyzer(), true);    Document d3 = new Document();    d3.add(new Field("f3", "v1", Field.Store.YES, Field.Index.TOKENIZED));    d3.add(new Field("f4", "v1", Field.Store.YES, Field.Index.TOKENIZED));    w2.addDocument(d3);    Document d4 = new Document();    d4.add(new Field("f3", "v2", Field.Store.YES, Field.Index.TOKENIZED));    d4.add(new Field("f4", "v2", Field.Store.YES, Field.Index.TOKENIZED));    w2.addDocument(d4);    w2.close();    return dir2;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -