Search in sources :

Example 1 with PointsFormat

use of org.apache.lucene.codecs.PointsFormat in project lucene-solr by apache.

the class DefaultIndexingChain method writePoints.

/** Writes all buffered points. */
private void writePoints(SegmentWriteState state, Sorter.DocMap sortMap) throws IOException {
    PointsWriter pointsWriter = null;
    boolean success = false;
    try {
        for (int i = 0; i < fieldHash.length; i++) {
            PerField perField = fieldHash[i];
            while (perField != null) {
                if (perField.pointValuesWriter != null) {
                    if (perField.fieldInfo.getPointDimensionCount() == 0) {
                        // BUG
                        throw new AssertionError("segment=" + state.segmentInfo + ": field=\"" + perField.fieldInfo.name + "\" has no points but wrote them");
                    }
                    if (pointsWriter == null) {
                        // lazy init
                        PointsFormat fmt = state.segmentInfo.getCodec().pointsFormat();
                        if (fmt == null) {
                            throw new IllegalStateException("field=\"" + perField.fieldInfo.name + "\" was indexed as points but codec does not support points");
                        }
                        pointsWriter = fmt.fieldsWriter(state);
                    }
                    perField.pointValuesWriter.flush(state, sortMap, pointsWriter);
                    perField.pointValuesWriter = null;
                } else if (perField.fieldInfo.getPointDimensionCount() != 0) {
                    // BUG
                    throw new AssertionError("segment=" + state.segmentInfo + ": field=\"" + perField.fieldInfo.name + "\" has points but did not write them");
                }
                perField = perField.next;
            }
        }
        if (pointsWriter != null) {
            pointsWriter.finish();
        }
        success = true;
    } finally {
        if (success) {
            IOUtils.close(pointsWriter);
        } else {
            IOUtils.closeWhileHandlingException(pointsWriter);
        }
    }
}
Also used : PointsWriter(org.apache.lucene.codecs.PointsWriter) PointsFormat(org.apache.lucene.codecs.PointsFormat)

Example 2 with PointsFormat

use of org.apache.lucene.codecs.PointsFormat in project lucene-solr by apache.

the class BaseGeoPointTestCase method doRandomDistanceTest.

private void doRandomDistanceTest(int numDocs, int numQueries) throws IOException {
    Directory dir = newDirectory();
    IndexWriterConfig iwc = newIndexWriterConfig();
    // Else seeds may not reproduce:
    iwc.setMergeScheduler(new SerialMergeScheduler());
    int pointsInLeaf = 2 + random().nextInt(4);
    iwc.setCodec(new FilterCodec("Lucene70", TestUtil.getDefaultCodec()) {

        @Override
        public PointsFormat pointsFormat() {
            return new PointsFormat() {

                @Override
                public PointsWriter fieldsWriter(SegmentWriteState writeState) throws IOException {
                    return new Lucene60PointsWriter(writeState, pointsInLeaf, BKDWriter.DEFAULT_MAX_MB_SORT_IN_HEAP);
                }

                @Override
                public PointsReader fieldsReader(SegmentReadState readState) throws IOException {
                    return new Lucene60PointsReader(readState);
                }
            };
        }
    });
    RandomIndexWriter writer = new RandomIndexWriter(random(), dir, iwc);
    for (int i = 0; i < numDocs; i++) {
        double latRaw = nextLatitude();
        double lonRaw = nextLongitude();
        // pre-normalize up front, so we can just use quantized value for testing and do simple exact comparisons
        double lat = quantizeLat(latRaw);
        double lon = quantizeLon(lonRaw);
        Document doc = new Document();
        addPointToDoc("field", doc, lat, lon);
        doc.add(new StoredField("lat", lat));
        doc.add(new StoredField("lon", lon));
        writer.addDocument(doc);
    }
    IndexReader reader = writer.getReader();
    IndexSearcher searcher = newSearcher(reader);
    for (int i = 0; i < numQueries; i++) {
        double lat = nextLatitude();
        double lon = nextLongitude();
        double radius = 50000000D * random().nextDouble();
        BitSet expected = new BitSet();
        for (int doc = 0; doc < reader.maxDoc(); doc++) {
            double docLatitude = reader.document(doc).getField("lat").numericValue().doubleValue();
            double docLongitude = reader.document(doc).getField("lon").numericValue().doubleValue();
            double distance = SloppyMath.haversinMeters(lat, lon, docLatitude, docLongitude);
            if (distance <= radius) {
                expected.set(doc);
            }
        }
        TopDocs topDocs = searcher.search(newDistanceQuery("field", lat, lon, radius), reader.maxDoc(), Sort.INDEXORDER);
        BitSet actual = new BitSet();
        for (ScoreDoc doc : topDocs.scoreDocs) {
            actual.set(doc.doc);
        }
        try {
            assertEquals(expected, actual);
        } catch (AssertionError e) {
            System.out.println("center: (" + lat + "," + lon + "), radius=" + radius);
            for (int doc = 0; doc < reader.maxDoc(); doc++) {
                double docLatitude = reader.document(doc).getField("lat").numericValue().doubleValue();
                double docLongitude = reader.document(doc).getField("lon").numericValue().doubleValue();
                double distance = SloppyMath.haversinMeters(lat, lon, docLatitude, docLongitude);
                System.out.println("" + doc + ": (" + docLatitude + "," + docLongitude + "), distance=" + distance);
            }
            throw e;
        }
    }
    reader.close();
    writer.close();
    dir.close();
}
Also used : Lucene60PointsWriter(org.apache.lucene.codecs.lucene60.Lucene60PointsWriter) PointsWriter(org.apache.lucene.codecs.PointsWriter) IndexSearcher(org.apache.lucene.search.IndexSearcher) Lucene60PointsReader(org.apache.lucene.codecs.lucene60.Lucene60PointsReader) SegmentReadState(org.apache.lucene.index.SegmentReadState) FixedBitSet(org.apache.lucene.util.FixedBitSet) BitSet(java.util.BitSet) IOException(java.io.IOException) Document(org.apache.lucene.document.Document) FilterCodec(org.apache.lucene.codecs.FilterCodec) ScoreDoc(org.apache.lucene.search.ScoreDoc) SerialMergeScheduler(org.apache.lucene.index.SerialMergeScheduler) TopDocs(org.apache.lucene.search.TopDocs) StoredField(org.apache.lucene.document.StoredField) PointsFormat(org.apache.lucene.codecs.PointsFormat) PointsReader(org.apache.lucene.codecs.PointsReader) Lucene60PointsReader(org.apache.lucene.codecs.lucene60.Lucene60PointsReader) IndexReader(org.apache.lucene.index.IndexReader) SegmentWriteState(org.apache.lucene.index.SegmentWriteState) Lucene60PointsWriter(org.apache.lucene.codecs.lucene60.Lucene60PointsWriter) RandomIndexWriter(org.apache.lucene.index.RandomIndexWriter) Directory(org.apache.lucene.store.Directory) IndexWriterConfig(org.apache.lucene.index.IndexWriterConfig)

Example 3 with PointsFormat

use of org.apache.lucene.codecs.PointsFormat in project lucene-solr by apache.

the class TestGeo3DPoint method getCodec.

private static Codec getCodec() {
    if (Codec.getDefault().getName().equals("Lucene70")) {
        int maxPointsInLeafNode = TestUtil.nextInt(random(), 16, 2048);
        double maxMBSortInHeap = 3.0 + (3 * random().nextDouble());
        if (VERBOSE) {
            System.out.println("TEST: using Lucene60PointsFormat with maxPointsInLeafNode=" + maxPointsInLeafNode + " and maxMBSortInHeap=" + maxMBSortInHeap);
        }
        return new FilterCodec("Lucene70", Codec.getDefault()) {

            @Override
            public PointsFormat pointsFormat() {
                return new PointsFormat() {

                    @Override
                    public PointsWriter fieldsWriter(SegmentWriteState writeState) throws IOException {
                        return new Lucene60PointsWriter(writeState, maxPointsInLeafNode, maxMBSortInHeap);
                    }

                    @Override
                    public PointsReader fieldsReader(SegmentReadState readState) throws IOException {
                        return new Lucene60PointsReader(readState);
                    }
                };
            }
        };
    } else {
        return Codec.getDefault();
    }
}
Also used : PointsFormat(org.apache.lucene.codecs.PointsFormat) Lucene60PointsReader(org.apache.lucene.codecs.lucene60.Lucene60PointsReader) SegmentReadState(org.apache.lucene.index.SegmentReadState) SegmentWriteState(org.apache.lucene.index.SegmentWriteState) Lucene60PointsWriter(org.apache.lucene.codecs.lucene60.Lucene60PointsWriter) GeoPoint(org.apache.lucene.spatial3d.geom.GeoPoint) FilterCodec(org.apache.lucene.codecs.FilterCodec)

Example 4 with PointsFormat

use of org.apache.lucene.codecs.PointsFormat in project lucene-solr by apache.

the class TestPointQueries method getCodec.

private static Codec getCodec() {
    if (Codec.getDefault().getName().equals("Lucene70")) {
        int maxPointsInLeafNode = TestUtil.nextInt(random(), 16, 2048);
        double maxMBSortInHeap = 5.0 + (3 * random().nextDouble());
        if (VERBOSE) {
            System.out.println("TEST: using Lucene60PointsFormat with maxPointsInLeafNode=" + maxPointsInLeafNode + " and maxMBSortInHeap=" + maxMBSortInHeap);
        }
        return new FilterCodec("Lucene70", Codec.getDefault()) {

            @Override
            public PointsFormat pointsFormat() {
                return new PointsFormat() {

                    @Override
                    public PointsWriter fieldsWriter(SegmentWriteState writeState) throws IOException {
                        return new Lucene60PointsWriter(writeState, maxPointsInLeafNode, maxMBSortInHeap);
                    }

                    @Override
                    public PointsReader fieldsReader(SegmentReadState readState) throws IOException {
                        return new Lucene60PointsReader(readState);
                    }
                };
            }
        };
    } else {
        return Codec.getDefault();
    }
}
Also used : PointsFormat(org.apache.lucene.codecs.PointsFormat) Lucene60PointsReader(org.apache.lucene.codecs.lucene60.Lucene60PointsReader) SegmentReadState(org.apache.lucene.index.SegmentReadState) SegmentWriteState(org.apache.lucene.index.SegmentWriteState) Lucene60PointsWriter(org.apache.lucene.codecs.lucene60.Lucene60PointsWriter) BinaryPoint(org.apache.lucene.document.BinaryPoint) DoublePoint(org.apache.lucene.document.DoublePoint) LongPoint(org.apache.lucene.document.LongPoint) IntPoint(org.apache.lucene.document.IntPoint) FloatPoint(org.apache.lucene.document.FloatPoint) FilterCodec(org.apache.lucene.codecs.FilterCodec)

Aggregations

PointsFormat (org.apache.lucene.codecs.PointsFormat)4 FilterCodec (org.apache.lucene.codecs.FilterCodec)3 Lucene60PointsReader (org.apache.lucene.codecs.lucene60.Lucene60PointsReader)3 Lucene60PointsWriter (org.apache.lucene.codecs.lucene60.Lucene60PointsWriter)3 SegmentReadState (org.apache.lucene.index.SegmentReadState)3 SegmentWriteState (org.apache.lucene.index.SegmentWriteState)3 PointsWriter (org.apache.lucene.codecs.PointsWriter)2 IOException (java.io.IOException)1 BitSet (java.util.BitSet)1 PointsReader (org.apache.lucene.codecs.PointsReader)1 BinaryPoint (org.apache.lucene.document.BinaryPoint)1 Document (org.apache.lucene.document.Document)1 DoublePoint (org.apache.lucene.document.DoublePoint)1 FloatPoint (org.apache.lucene.document.FloatPoint)1 IntPoint (org.apache.lucene.document.IntPoint)1 LongPoint (org.apache.lucene.document.LongPoint)1 StoredField (org.apache.lucene.document.StoredField)1 IndexReader (org.apache.lucene.index.IndexReader)1 IndexWriterConfig (org.apache.lucene.index.IndexWriterConfig)1 RandomIndexWriter (org.apache.lucene.index.RandomIndexWriter)1