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++) {
|
for(int i=0;i<mergeState.pointReaders.length;i++) {
|
||||||
PointReader reader = mergeState.pointReaders[i];
|
PointReader reader = mergeState.pointReaders[i];
|
||||||
|
|
||||||
Lucene60PointReader reader60 = (Lucene60PointReader) reader;
|
if (reader != null) {
|
||||||
if (reader60 != null) {
|
|
||||||
// TODO: I could just use the merged fieldInfo.number instead of resolving to this
|
// we confirmed this up above
|
||||||
// reader's FieldInfo, right? Field numbers are always consistent across segments,
|
assert reader instanceof Lucene60PointReader;
|
||||||
// since when?
|
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];
|
FieldInfos readerFieldInfos = mergeState.fieldInfos[i];
|
||||||
FieldInfo readerFieldInfo = readerFieldInfos.fieldInfo(fieldInfo.name);
|
FieldInfo readerFieldInfo = readerFieldInfos.fieldInfo(fieldInfo.name);
|
||||||
if (readerFieldInfo != null) {
|
if (readerFieldInfo != null) {
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
package org.apache.lucene.index;
|
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
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
@ -21,6 +17,10 @@ import org.apache.lucene.util.bkd.BKDWriter;
|
||||||
* limitations under the License.
|
* 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},
|
/** 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}
|
* {@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}.
|
* 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.analysis.MockAnalyzer;
|
||||||
|
import org.apache.lucene.codecs.Codec;
|
||||||
import org.apache.lucene.document.BinaryPoint;
|
import org.apache.lucene.document.BinaryPoint;
|
||||||
import org.apache.lucene.document.IntPoint;
|
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.document.Field;
|
import org.apache.lucene.document.Field;
|
||||||
|
import org.apache.lucene.document.IntPoint;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.util.IOUtils;
|
import org.apache.lucene.util.IOUtils;
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
@ -388,4 +389,50 @@ public class TestPointValues extends LuceneTestCase {
|
||||||
w.close();
|
w.close();
|
||||||
dir.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;
|
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.io.IOException;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -17,6 +34,8 @@ import org.apache.lucene.document.NumericDocValuesField;
|
||||||
import org.apache.lucene.document.StringField;
|
import org.apache.lucene.document.StringField;
|
||||||
import org.apache.lucene.index.PointValues.IntersectVisitor;
|
import org.apache.lucene.index.PointValues.IntersectVisitor;
|
||||||
import org.apache.lucene.index.PointValues.Relation;
|
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.Directory;
|
||||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||||
import org.apache.lucene.util.Bits;
|
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.StringHelper;
|
||||||
import org.apache.lucene.util.TestUtil;
|
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.
|
* Abstract class to do basic tests for a points format.
|
||||||
* NOTE: This test focuses on the points impl, nothing else.
|
* 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 {
|
private void switchIndex(RandomIndexWriter w, Directory dir, RandomIndexWriter saveW) throws IOException {
|
||||||
if (random().nextBoolean()) {
|
if (random().nextBoolean()) {
|
||||||
// Add via readers:
|
// Add via readers:
|
||||||
|
|
Loading…
Reference in New Issue