Thanks for noticing this Alan! I've reverted the changes to this file and then re-added the entry to CHANGES.txt in two separate commits.
On Thu, Jun 8, 2017 at 1:23 PM Martijn v Groningen < martijn.v.gronin...@gmail.com> wrote: > Yes, this is a mistake. Let me fix this. > > On Thu, Jun 8, 2017 at 1:16 PM Alan Woodward <a...@flax.co.uk> wrote: > >> There’s a few unrelated edits to CHANGES.txt here which I think might be >> a mistake? >> >> > On 8 Jun 2017, at 11:23, m...@apache.org wrote: >> > >> > Repository: lucene-solr >> > Updated Branches: >> > refs/heads/branch_6_6 0238eeef2 -> 703053094 >> > >> > >> > LUCENE-7869: Changed MemoryIndex to sort 1d points. >> > >> > In case of 1d points, the PointInSetQuery.MergePointVisitor expects >> that these points are visited in ascending order. >> > Prior to this change the memory index doesn't do this and this can >> result in document with multiple points that should match to not match. >> > >> > >> > Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo >> > Commit: >> http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/70305309 >> > Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/70305309 >> > Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/70305309 >> > >> > Branch: refs/heads/branch_6_6 >> > Commit: 70305309471e906c8f64e4203aba475445278938 >> > Parents: 0238eee >> > Author: Martijn van Groningen <martijn.v.gronin...@gmail.com> >> > Authored: Wed Jun 7 19:55:32 2017 +0200 >> > Committer: Martijn van Groningen <martijn.v.gronin...@gmail.com> >> > Committed: Thu Jun 8 12:15:30 2017 +0200 >> > >> > ---------------------------------------------------------------------- >> > lucene/CHANGES.txt | 29 +++++----------- >> > .../apache/lucene/index/memory/MemoryIndex.java | 35 >> ++++++++++++-------- >> > .../lucene/index/memory/TestMemoryIndex.java | 24 ++++++++++++++ >> > 3 files changed, 54 insertions(+), 34 deletions(-) >> > ---------------------------------------------------------------------- >> > >> > >> > >> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/70305309/lucene/CHANGES.txt >> > ---------------------------------------------------------------------- >> > diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt >> > index f1bddde..1dfebfe 100644 >> > --- a/lucene/CHANGES.txt >> > +++ b/lucene/CHANGES.txt >> > @@ -4,7 +4,12 @@ For more information on past and future Lucene >> versions, please see: >> > http://s.apache.org/luceneversions >> > >> > ======================= Lucene 6.6.1 ======================= >> > -(No Changes) >> > + >> > +Bug Fixes >> > + >> > +* LUCENE-7869: Changed MemoryIndex to sort 1d points. In case of 1d >> points, the PointInSetQuery.MergePointVisitor expects >> > + that these points are visited in ascending order. The memory index >> doesn't do this and this can result in document >> > + with multiple points that should match to not match. (Martijn van >> Groningen) >> > >> > ======================= Lucene 6.6.0 ======================= >> > >> > @@ -102,9 +107,6 @@ Other >> > * LUCENE-7761: Fixed comment in ReqExclScorer. >> > (Pablo Pita Leira via Adrien Grand) >> > >> > -* LUCENE-7815: Deprecate the PostingsHighlighter. It evolved into the >> > - UnifiedHighlighter. (David Smiley) >> > - >> > ======================= Lucene 6.5.1 ======================= >> > >> > Bug Fixes >> > @@ -118,9 +120,6 @@ Bug Fixes >> > * LUCENE-7769: The UnifiedHighligter wasn't highlighting portions of >> the query >> > wrapped in BoostQuery or SpanBoostQuery. (David Smiley, Dmitry >> Malinin) >> > >> > -* LUCENE-7791: Fixed index sorting to work with sparse numeric and >> binary docvalues field. >> > - (Przemyslaw Szeremiota via Jim Ferenczi) >> > - >> > Other >> > >> > * LUCENE-7763: Remove outdated comment in >> IndexWriterConfig.setIndexSort javadocs. >> > @@ -170,16 +169,15 @@ API Changes >> > instead of once all shard responses are present. (Simon Willnauer, >> > Mike McCandless) >> > >> > -* LUCENE-6819: Index-time boosts are deprecated. As a replacement, >> index-time >> > - scoring factors should be indexed into a doc value field and >> combined at >> > - query time using eg. FunctionScoreQuery. (Adrien Grand) >> > - >> > * LUCENE-7700: A cleanup of merge throughput control logic. Refactored >> all the >> > code previously scattered throughout the IndexWriter and >> > ConcurrentMergeScheduler into a more accessible set of public methods >> (see >> > MergePolicy.OneMergeProgress, MergeScheduler.wrapForMerge and >> > OneMerge.mergeInit). (Dawid Weiss, Mike McCandless). >> > >> > +* LUCENE-7734: FieldType's copy constructor was widened to accept any >> IndexableFieldType. >> > + (David Smiley) >> > + >> > New Features >> > >> > * LUCENE-7738: Add new InetAddressRange for indexing and querying >> InetAddress >> > @@ -343,10 +341,6 @@ Other >> > * LUCENE-7658: queryparser/xml CoreParser now implements >> SpanQueryBuilder interface. >> > (Daniel Collins, Christine Poerschke) >> > >> > -* LUCENE-7664: GeoPointField and its queries are deprecated in favor >> > - of LatLonPoint, which offers faster indexing and searching >> > - performance, smaller index, and less search-time heap usage. (Mike >> McCandless) >> > - >> > * LUCENE-7715: NearSpansUnordered simplifications. >> > (Paul Elschot via Adrien Grand) >> > >> > @@ -567,11 +561,6 @@ Optimizations >> > >> > * LUCENE-7572: Doc values queries now cache their hash code. (Adrien >> Grand) >> > >> > -* LUCENE-7579: Segments are now also sorted during flush, and merging >> > - on a sorted index is substantially faster by using some of the same >> > - bulk merge optimizations that non-sorted merging uses (Jim Ferenczi >> > - via Mike McCandless) >> > - >> > Other >> > >> > * LUCENE-7546: Fixed references to benchmark wikipedia data and the >> Jenkins line-docs file >> > >> > >> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/70305309/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java >> > ---------------------------------------------------------------------- >> > diff --git >> a/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java >> b/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java >> > index a1390b3..c8a4523 100644 >> > --- >> a/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java >> > +++ >> b/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java >> > @@ -929,20 +929,27 @@ public class MemoryIndex { >> > >> > final int numDimensions = fieldInfo.getPointDimensionCount(); >> > final int numBytesPerDimension = fieldInfo.getPointNumBytes(); >> > - minPackedValue = pointValues[0].bytes.clone(); >> > - maxPackedValue = pointValues[0].bytes.clone(); >> > - >> > - for (int i = 0; i < pointValuesCount; i++) { >> > - BytesRef pointValue = pointValues[i]; >> > - assert pointValue.bytes.length == pointValue.length : >> "BytesRef should wrap a precise byte[], BytesRef.deepCopyOf() should take >> care of this"; >> > - >> > - for (int dim = 0; dim < numDimensions; ++dim) { >> > - int offset = dim * numBytesPerDimension; >> > - if (StringHelper.compare(numBytesPerDimension, >> pointValue.bytes, offset, minPackedValue, offset) < 0) { >> > - System.arraycopy(pointValue.bytes, offset, >> minPackedValue, offset, numBytesPerDimension); >> > - } >> > - if (StringHelper.compare(numBytesPerDimension, >> pointValue.bytes, offset, maxPackedValue, offset) > 0) { >> > - System.arraycopy(pointValue.bytes, offset, >> maxPackedValue, offset, numBytesPerDimension); >> > + if (numDimensions == 1) { >> > + // PointInSetQuery.MergePointVisitor expects values to be >> visited in increasing order, >> > + // this is a 1d optimization which has to be done here >> too. Otherwise we emit values >> > + // out of order which causes mismatches. >> > + Arrays.sort(pointValues, 0, pointValuesCount); >> > + minPackedValue = pointValues[0].bytes.clone(); >> > + maxPackedValue = pointValues[pointValuesCount - >> 1].bytes.clone(); >> > + } else { >> > + minPackedValue = pointValues[0].bytes.clone(); >> > + maxPackedValue = pointValues[0].bytes.clone(); >> > + for (int i = 0; i < pointValuesCount; i++) { >> > + BytesRef pointValue = pointValues[i]; >> > + assert pointValue.bytes.length == pointValue.length : >> "BytesRef should wrap a precise byte[], BytesRef.deepCopyOf() should take >> care of this"; >> > + for (int dim = 0; dim < numDimensions; ++dim) { >> > + int offset = dim * numBytesPerDimension; >> > + if (StringHelper.compare(numBytesPerDimension, >> pointValue.bytes, offset, minPackedValue, offset) < 0) { >> > + System.arraycopy(pointValue.bytes, offset, >> minPackedValue, offset, numBytesPerDimension); >> > + } >> > + if (StringHelper.compare(numBytesPerDimension, >> pointValue.bytes, offset, maxPackedValue, offset) > 0) { >> > + System.arraycopy(pointValue.bytes, offset, >> maxPackedValue, offset, numBytesPerDimension); >> > + } >> > } >> > } >> > } >> > >> > >> http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/70305309/lucene/memory/src/test/org/apache/lucene/index/memory/TestMemoryIndex.java >> > ---------------------------------------------------------------------- >> > diff --git >> a/lucene/memory/src/test/org/apache/lucene/index/memory/TestMemoryIndex.java >> b/lucene/memory/src/test/org/apache/lucene/index/memory/TestMemoryIndex.java >> > index 75344e3..8df1afb 100644 >> > --- >> a/lucene/memory/src/test/org/apache/lucene/index/memory/TestMemoryIndex.java >> > +++ >> b/lucene/memory/src/test/org/apache/lucene/index/memory/TestMemoryIndex.java >> > @@ -476,6 +476,30 @@ public class TestMemoryIndex extends >> LuceneTestCase { >> > assertEquals(1, s.count(DoublePoint.newRangeQuery("doubles", new >> double[] {10D, 10D}, new double[] {30D, 30D}))); >> > } >> > >> > + public void testMultiValuedPointsSortedCorrectly() throws Exception { >> > + Document doc = new Document(); >> > + doc.add(new IntPoint("ints", 3)); >> > + doc.add(new IntPoint("ints", 2)); >> > + doc.add(new IntPoint("ints", 1)); >> > + doc.add(new LongPoint("longs", 3L)); >> > + doc.add(new LongPoint("longs", 2L)); >> > + doc.add(new LongPoint("longs", 1L)); >> > + doc.add(new FloatPoint("floats", 3F)); >> > + doc.add(new FloatPoint("floats", 2F)); >> > + doc.add(new FloatPoint("floats", 1F)); >> > + doc.add(new DoublePoint("doubles", 3D)); >> > + doc.add(new DoublePoint("doubles", 2D)); >> > + doc.add(new DoublePoint("doubles", 1D)); >> > + >> > + MemoryIndex mi = MemoryIndex.fromDocument(doc, analyzer); >> > + IndexSearcher s = mi.createSearcher(); >> > + >> > + assertEquals(1, s.count(IntPoint.newSetQuery("ints", 2))); >> > + assertEquals(1, s.count(LongPoint.newSetQuery("longs", 2))); >> > + assertEquals(1, s.count(FloatPoint.newSetQuery("floats", 2))); >> > + assertEquals(1, s.count(DoublePoint.newSetQuery("doubles", 2))); >> > + } >> > + >> > public void testIndexingPointsAndDocValues() throws Exception { >> > FieldType type = new FieldType(); >> > type.setDimensions(1, 4); >> > >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org >> For additional commands, e-mail: dev-h...@lucene.apache.org >> >>