mirror of https://github.com/apache/lucene.git
fix wrong comment; add test proving it's wrong; add mixed codec tests
This commit is contained in:
parent
ff49bd5922
commit
ddbf3a2168
|
@ -141,11 +141,17 @@ public class Lucene60PointWriter extends PointWriter implements Closeable {
|
|||
for(int i=0;i<mergeState.pointReaders.length;i++) {
|
||||
PointReader reader = mergeState.pointReaders[i];
|
||||
|
||||
Lucene60PointReader reader60 = (Lucene60PointReader) reader;
|
||||
if (reader60 != null) {
|
||||
// TODO: I could just use the merged fieldInfo.number instead of resolving to this
|
||||
// reader's FieldInfo, right? Field numbers are always consistent across segments,
|
||||
// since when?
|
||||
if (reader != null) {
|
||||
|
||||
// we confirmed this up above
|
||||
assert reader instanceof Lucene60PointReader;
|
||||
Lucene60PointReader reader60 = (Lucene60PointReader) reader;
|
||||
|
||||
// NOTE: we cannot just use the merged fieldInfo.number (instead of resolving to this
|
||||
// reader's FieldInfo as we do below) because field numbers can easily be different
|
||||
// when addIndexes(Directory...) copies over segments from another index:
|
||||
|
||||
|
||||
FieldInfos readerFieldInfos = mergeState.fieldInfos[i];
|
||||
FieldInfo readerFieldInfo = readerFieldInfos.fieldInfo(fieldInfo.name);
|
||||
if (readerFieldInfo != null) {
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
package org.apache.lucene.index;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.util.bkd.BKDWriter;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
|
@ -21,6 +17,10 @@ import org.apache.lucene.util.bkd.BKDWriter;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.util.bkd.BKDWriter;
|
||||
|
||||
/** Allows recursively visiting point values indexed with {@link org.apache.lucene.document.IntPoint},
|
||||
* {@link org.apache.lucene.document.FloatPoint}, {@link org.apache.lucene.document.LongPoint}, {@link org.apache.lucene.document.DoublePoint}
|
||||
* or {@link org.apache.lucene.document.BinaryPoint}.
|
||||
|
|
|
@ -18,10 +18,11 @@ package org.apache.lucene.index;
|
|||
*/
|
||||
|
||||
import org.apache.lucene.analysis.MockAnalyzer;
|
||||
import org.apache.lucene.codecs.Codec;
|
||||
import org.apache.lucene.document.BinaryPoint;
|
||||
import org.apache.lucene.document.IntPoint;
|
||||
import org.apache.lucene.document.Document;
|
||||
import org.apache.lucene.document.Field;
|
||||
import org.apache.lucene.document.IntPoint;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.IOUtils;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
|
@ -388,4 +389,50 @@ public class TestPointValues extends LuceneTestCase {
|
|||
w.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
// Write point values, one segment with Lucene60, another with SimpleText, then forceMerge with SimpleText
|
||||
public void testDifferentCodecs1() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random()));
|
||||
iwc.setCodec(Codec.forName("Lucene60"));
|
||||
IndexWriter w = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
doc.add(new IntPoint("int", 1));
|
||||
w.addDocument(doc);
|
||||
w.close();
|
||||
|
||||
iwc = new IndexWriterConfig(new MockAnalyzer(random()));
|
||||
iwc.setCodec(Codec.forName("SimpleText"));
|
||||
w = new IndexWriter(dir, iwc);
|
||||
doc = new Document();
|
||||
doc.add(new IntPoint("int", 1));
|
||||
w.addDocument(doc);
|
||||
|
||||
w.forceMerge(1);
|
||||
w.close();
|
||||
dir.close();
|
||||
}
|
||||
|
||||
// Write point values, one segment with Lucene60, another with SimpleText, then forceMerge with Lucene60
|
||||
public void testDifferentCodecs2() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random()));
|
||||
iwc.setCodec(Codec.forName("SimpleText"));
|
||||
IndexWriter w = new IndexWriter(dir, iwc);
|
||||
Document doc = new Document();
|
||||
doc.add(new IntPoint("int", 1));
|
||||
w.addDocument(doc);
|
||||
w.close();
|
||||
|
||||
iwc = new IndexWriterConfig(new MockAnalyzer(random()));
|
||||
iwc.setCodec(Codec.forName("Lucene60"));
|
||||
w = new IndexWriter(dir, iwc);
|
||||
doc = new Document();
|
||||
doc.add(new IntPoint("int", 1));
|
||||
w.addDocument(doc);
|
||||
|
||||
w.forceMerge(1);
|
||||
w.close();
|
||||
dir.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,22 @@
|
|||
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.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
|
@ -17,6 +34,8 @@ import org.apache.lucene.document.NumericDocValuesField;
|
|||
import org.apache.lucene.document.StringField;
|
||||
import org.apache.lucene.index.PointValues.IntersectVisitor;
|
||||
import org.apache.lucene.index.PointValues.Relation;
|
||||
import org.apache.lucene.search.ExactPointQuery;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||
import org.apache.lucene.util.Bits;
|
||||
|
@ -26,23 +45,6 @@ import org.apache.lucene.util.NumericUtils;
|
|||
import org.apache.lucene.util.StringHelper;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Abstract class to do basic tests for a points format.
|
||||
* NOTE: This test focuses on the points impl, nothing else.
|
||||
|
@ -820,6 +822,44 @@ public abstract class BasePointFormatTestCase extends BaseIndexFileFormatTestCas
|
|||
}
|
||||
}
|
||||
|
||||
public void testAddIndexes() throws IOException {
|
||||
Directory dir1 = newDirectory();
|
||||
RandomIndexWriter w = new RandomIndexWriter(random(), dir1);
|
||||
Document doc = new Document();
|
||||
doc.add(new IntPoint("int1", 17));
|
||||
w.addDocument(doc);
|
||||
doc = new Document();
|
||||
doc.add(new IntPoint("int2", 42));
|
||||
w.addDocument(doc);
|
||||
w.close();
|
||||
|
||||
// Different field number assigments:
|
||||
Directory dir2 = newDirectory();
|
||||
w = new RandomIndexWriter(random(), dir2);
|
||||
doc = new Document();
|
||||
doc.add(new IntPoint("int2", 42));
|
||||
w.addDocument(doc);
|
||||
doc = new Document();
|
||||
doc.add(new IntPoint("int1", 17));
|
||||
w.addDocument(doc);
|
||||
w.close();
|
||||
|
||||
Directory dir = newDirectory();
|
||||
w = new RandomIndexWriter(random(), dir);
|
||||
w.addIndexes(new Directory[] {dir1, dir2});
|
||||
w.forceMerge(1);
|
||||
|
||||
DirectoryReader r = w.getReader();
|
||||
IndexSearcher s = newSearcher(r);
|
||||
assertEquals(2, s.count(ExactPointQuery.new1DIntExact("int1", 17)));
|
||||
assertEquals(2, s.count(ExactPointQuery.new1DIntExact("int2", 42)));
|
||||
r.close();
|
||||
w.close();
|
||||
dir.close();
|
||||
dir1.close();
|
||||
dir2.close();
|
||||
}
|
||||
|
||||
private void switchIndex(RandomIndexWriter w, Directory dir, RandomIndexWriter saveW) throws IOException {
|
||||
if (random().nextBoolean()) {
|
||||
// Add via readers:
|
||||
|
|
Loading…
Reference in New Issue