diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d23ba53 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/solr-8.1.1-src.tgz diff --git a/.lucene.metadata b/.lucene.metadata new file mode 100644 index 0000000..ed36f32 --- /dev/null +++ b/.lucene.metadata @@ -0,0 +1 @@ +47e53290e1f5db5d0ee769d38d64e3875f2578d7 SOURCES/solr-8.1.1-src.tgz diff --git a/SOURCES/0001-Disable-ivy-settings.patch b/SOURCES/0001-Disable-ivy-settings.patch new file mode 100644 index 0000000..717e5ab --- /dev/null +++ b/SOURCES/0001-Disable-ivy-settings.patch @@ -0,0 +1,24 @@ +From d409860c17a93f046ae55f34257f9e74fa5e45f5 Mon Sep 17 00:00:00 2001 +From: Michael Simacek +Date: Thu, 25 Feb 2016 12:26:12 +0100 +Subject: [PATCH 1/3] Disable ivy-settings + +--- + lucene/common-build.xml | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/lucene/common-build.xml b/lucene/common-build.xml +index 0bbd19a..6767ffe 100644 +--- a/lucene/common-build.xml ++++ b/lucene/common-build.xml +@@ -419,7 +419,6 @@ + you have an idea, fix it. + unless="ivy.settings.uptodate" --> + +- + + + +-- +2.20.1 + diff --git a/SOURCES/0002-Dependency-generation.patch b/SOURCES/0002-Dependency-generation.patch new file mode 100644 index 0000000..07be6eb --- /dev/null +++ b/SOURCES/0002-Dependency-generation.patch @@ -0,0 +1,71 @@ +From 521dc174c93efbe616dc5f573a5d293339df642b Mon Sep 17 00:00:00 2001 +From: Michael Simacek +Date: Thu, 25 Feb 2016 15:03:17 +0100 +Subject: [PATCH 2/3] Dependency generation + +--- + lucene/build.xml | 6 ++++-- + lucene/common-build.xml | 4 ++-- + .../lucene/dependencies/GetMavenDependenciesTask.java | 2 ++ + 3 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/lucene/build.xml b/lucene/build.xml +index 3c1439c..23d291a 100644 +--- a/lucene/build.xml ++++ b/lucene/build.xml +@@ -425,12 +425,14 @@ + + + +- +- ++ ++ + ++ + + + +diff --git a/lucene/common-build.xml b/lucene/common-build.xml +index 6767ffe..75f6579 100644 +--- a/lucene/common-build.xml ++++ b/lucene/common-build.xml +@@ -1855,9 +1855,9 @@ ${ant.project.name}.test.dependencies=${test.classpath.list} + + + +- ++ + +diff --git a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java +index 610323f..13bde29 100644 +--- a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java ++++ b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java +@@ -535,6 +535,7 @@ public class GetMavenDependenciesTask extends Task { + private Collection getTransitiveDependenciesFromIvyCache + (String groupId, String artifactId, String version) { + SortedSet transitiveDependencies = new TreeSet<>(); ++ /* + // E.g. ~/.ivy2/cache/xerces/xercesImpl/ivy-2.9.1.xml + File ivyXmlFile = new File(new File(new File(ivyCacheDir, groupId), artifactId), "ivy-" + version + ".xml"); + if ( ! ivyXmlFile.exists()) { +@@ -556,6 +557,7 @@ public class GetMavenDependenciesTask extends Task { + + groupId + ':' + artifactId + ':' + version + " from " + + ivyXmlFile.getAbsolutePath(), e); + } ++ */ + return transitiveDependencies; + } + +-- +2.20.1 + diff --git a/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch b/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch new file mode 100644 index 0000000..8a65efb --- /dev/null +++ b/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch @@ -0,0 +1,1337 @@ +From 9101a214c2b38c1a7bb154c3b48f4a1b3ce63ea4 Mon Sep 17 00:00:00 2001 +From: Mat Booth +Date: Thu, 14 Feb 2019 18:25:01 +0000 +Subject: [PATCH 3/3] Remove dep on missing google geometry library + +--- + lucene/CHANGES.txt | 5 - + .../s2-geometry-library-java-1.0.0.jar.sha1 | 1 - + .../s2-geometry-library-java-LICENSE-ASL.txt | 202 ------------ + .../s2-geometry-library-java-NOTICE.txt | 0 + lucene/spatial-extras/ivy.xml | 2 - + .../spatial/prefix/tree/S2PrefixTree.java | 157 --------- + .../spatial/prefix/tree/S2PrefixTreeCell.java | 297 ------------------ + .../spatial/prefix/tree/S2ShapeFactory.java | 40 --- + .../prefix/tree/SpatialPrefixTreeFactory.java | 2 - + .../spatial/spatial4j/Geo3dShapeFactory.java | 24 +- + .../spatial/prefix/tree/S2PrefixTreeTest.java | 113 ------- + .../spatial/spatial4j/Geo3dRptTest.java | 23 +- + .../lucene/spatial3d/geom/GeoS2Shape.java | 202 ------------ + .../spatial3d/geom/GeoS2ShapeFactory.java | 50 --- + .../spatial3d/geom/StandardObjects.java | 1 - + 15 files changed, 7 insertions(+), 1112 deletions(-) + delete mode 100644 lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 + delete mode 100644 lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt + delete mode 100644 lucene/licenses/s2-geometry-library-java-NOTICE.txt + delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java + delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java + delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java + delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java + delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java + delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java + +diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt +index 67aba94..eeee301 100644 +--- a/lucene/CHANGES.txt ++++ b/lucene/CHANGES.txt +@@ -690,11 +690,6 @@ New Features + (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau, + Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe) + +-* LUCENE-8126: Add new spatial prefix tree (SPT) based on google S2 geometry. +- It can only be used currently with Geo3D spatial context and it provides +- improvements on indexing time for non-points shapes and on query performance. +- (Ignacio Vera, David Smiley). +- + Improvements + + * LUCENE-8081: Allow IndexWriter to opt out of flushing on indexing threads +diff --git a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 b/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 +deleted file mode 100644 +index ef4e3ee..0000000 +--- a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 ++++ /dev/null +@@ -1 +0,0 @@ +-f95b25589b40b5b0965deb592445073ff3efa299 +diff --git a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt b/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt +deleted file mode 100644 +index 03c7bfc..0000000 +--- a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt ++++ /dev/null +@@ -1,202 +0,0 @@ +- +- Apache License +- Version 2.0, January 2004 +- http://www.apache.org/licenses/ +- +- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +- +- 1. Definitions. +- +- "License" shall mean the terms and conditions for use, reproduction, +- and distribution as defined by Sections 1 through 9 of this document. +- +- "Licensor" shall mean the copyright owner or entity authorized by +- the copyright owner that is granting the License. +- +- "Legal Entity" shall mean the union of the acting entity and all +- other entities that control, are controlled by, or are under common +- control with that entity. For the purposes of this definition, +- "control" means (i) the power, direct or indirect, to cause the +- direction or management of such entity, whether by contract or +- otherwise, or (ii) ownership of fifty percent (50%) or more of the +- outstanding shares, or (iii) beneficial ownership of such entity. +- +- "You" (or "Your") shall mean an individual or Legal Entity +- exercising permissions granted by this License. +- +- "Source" form shall mean the preferred form for making modifications, +- including but not limited to software source code, documentation +- source, and configuration files. +- +- "Object" form shall mean any form resulting from mechanical +- transformation or translation of a Source form, including but +- not limited to compiled object code, generated documentation, +- and conversions to other media types. +- +- "Work" shall mean the work of authorship, whether in Source or +- Object form, made available under the License, as indicated by a +- copyright notice that is included in or attached to the work +- (an example is provided in the Appendix below). +- +- "Derivative Works" shall mean any work, whether in Source or Object +- form, that is based on (or derived from) the Work and for which the +- editorial revisions, annotations, elaborations, or other modifications +- represent, as a whole, an original work of authorship. For the purposes +- of this License, Derivative Works shall not include works that remain +- separable from, or merely link (or bind by name) to the interfaces of, +- the Work and Derivative Works thereof. +- +- "Contribution" shall mean any work of authorship, including +- the original version of the Work and any modifications or additions +- to that Work or Derivative Works thereof, that is intentionally +- submitted to Licensor for inclusion in the Work by the copyright owner +- or by an individual or Legal Entity authorized to submit on behalf of +- the copyright owner. For the purposes of this definition, "submitted" +- means any form of electronic, verbal, or written communication sent +- to the Licensor or its representatives, including but not limited to +- communication on electronic mailing lists, source code control systems, +- and issue tracking systems that are managed by, or on behalf of, the +- Licensor for the purpose of discussing and improving the Work, but +- excluding communication that is conspicuously marked or otherwise +- designated in writing by the copyright owner as "Not a Contribution." +- +- "Contributor" shall mean Licensor and any individual or Legal Entity +- on behalf of whom a Contribution has been received by Licensor and +- subsequently incorporated within the Work. +- +- 2. Grant of Copyright License. Subject to the terms and conditions of +- this License, each Contributor hereby grants to You a perpetual, +- worldwide, non-exclusive, no-charge, royalty-free, irrevocable +- copyright license to reproduce, prepare Derivative Works of, +- publicly display, publicly perform, sublicense, and distribute the +- Work and such Derivative Works in Source or Object form. +- +- 3. Grant of Patent License. Subject to the terms and conditions of +- this License, each Contributor hereby grants to You a perpetual, +- worldwide, non-exclusive, no-charge, royalty-free, irrevocable +- (except as stated in this section) patent license to make, have made, +- use, offer to sell, sell, import, and otherwise transfer the Work, +- where such license applies only to those patent claims licensable +- by such Contributor that are necessarily infringed by their +- Contribution(s) alone or by combination of their Contribution(s) +- with the Work to which such Contribution(s) was submitted. If You +- institute patent litigation against any entity (including a +- cross-claim or counterclaim in a lawsuit) alleging that the Work +- or a Contribution incorporated within the Work constitutes direct +- or contributory patent infringement, then any patent licenses +- granted to You under this License for that Work shall terminate +- as of the date such litigation is filed. +- +- 4. Redistribution. You may reproduce and distribute copies of the +- Work or Derivative Works thereof in any medium, with or without +- modifications, and in Source or Object form, provided that You +- meet the following conditions: +- +- (a) You must give any other recipients of the Work or +- Derivative Works a copy of this License; and +- +- (b) You must cause any modified files to carry prominent notices +- stating that You changed the files; and +- +- (c) You must retain, in the Source form of any Derivative Works +- that You distribute, all copyright, patent, trademark, and +- attribution notices from the Source form of the Work, +- excluding those notices that do not pertain to any part of +- the Derivative Works; and +- +- (d) If the Work includes a "NOTICE" text file as part of its +- distribution, then any Derivative Works that You distribute must +- include a readable copy of the attribution notices contained +- within such NOTICE file, excluding those notices that do not +- pertain to any part of the Derivative Works, in at least one +- of the following places: within a NOTICE text file distributed +- as part of the Derivative Works; within the Source form or +- documentation, if provided along with the Derivative Works; or, +- within a display generated by the Derivative Works, if and +- wherever such third-party notices normally appear. The contents +- of the NOTICE file are for informational purposes only and +- do not modify the License. You may add Your own attribution +- notices within Derivative Works that You distribute, alongside +- or as an addendum to the NOTICE text from the Work, provided +- that such additional attribution notices cannot be construed +- as modifying the License. +- +- You may add Your own copyright statement to Your modifications and +- may provide additional or different license terms and conditions +- for use, reproduction, or distribution of Your modifications, or +- for any such Derivative Works as a whole, provided Your use, +- reproduction, and distribution of the Work otherwise complies with +- the conditions stated in this License. +- +- 5. Submission of Contributions. Unless You explicitly state otherwise, +- any Contribution intentionally submitted for inclusion in the Work +- by You to the Licensor shall be under the terms and conditions of +- this License, without any additional terms or conditions. +- Notwithstanding the above, nothing herein shall supersede or modify +- the terms of any separate license agreement you may have executed +- with Licensor regarding such Contributions. +- +- 6. Trademarks. This License does not grant permission to use the trade +- names, trademarks, service marks, or product names of the Licensor, +- except as required for reasonable and customary use in describing the +- origin of the Work and reproducing the content of the NOTICE file. +- +- 7. Disclaimer of Warranty. Unless required by applicable law or +- agreed to in writing, Licensor provides the Work (and each +- Contributor provides its Contributions) on an "AS IS" BASIS, +- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +- implied, including, without limitation, any warranties or conditions +- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +- PARTICULAR PURPOSE. You are solely responsible for determining the +- appropriateness of using or redistributing the Work and assume any +- risks associated with Your exercise of permissions under this License. +- +- 8. Limitation of Liability. In no event and under no legal theory, +- whether in tort (including negligence), contract, or otherwise, +- unless required by applicable law (such as deliberate and grossly +- negligent acts) or agreed to in writing, shall any Contributor be +- liable to You for damages, including any direct, indirect, special, +- incidental, or consequential damages of any character arising as a +- result of this License or out of the use or inability to use the +- Work (including but not limited to damages for loss of goodwill, +- work stoppage, computer failure or malfunction, or any and all +- other commercial damages or losses), even if such Contributor +- has been advised of the possibility of such damages. +- +- 9. Accepting Warranty or Additional Liability. While redistributing +- the Work or Derivative Works thereof, You may choose to offer, +- and charge a fee for, acceptance of support, warranty, indemnity, +- or other liability obligations and/or rights consistent with this +- License. However, in accepting such obligations, You may act only +- on Your own behalf and on Your sole responsibility, not on behalf +- of any other Contributor, and only if You agree to indemnify, +- defend, and hold each Contributor harmless for any liability +- incurred by, or claims asserted against, such Contributor by reason +- of your accepting any such warranty or additional liability. +- +- END OF TERMS AND CONDITIONS +- +- APPENDIX: How to apply the Apache License to your work. +- +- To apply the Apache License to your work, attach the following +- boilerplate notice, with the fields enclosed by brackets "[]" +- replaced with your own identifying information. (Don't include +- the brackets!) The text should be enclosed in the appropriate +- comment syntax for the file format. We also recommend that a +- file or class name and description of purpose be included on the +- same "printed page" as the copyright notice for easier +- identification within third-party archives. +- +- Copyright [yyyy] [name of copyright owner] +- +- Licensed 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. +\ No newline at end of file +diff --git a/lucene/licenses/s2-geometry-library-java-NOTICE.txt b/lucene/licenses/s2-geometry-library-java-NOTICE.txt +deleted file mode 100644 +index e69de29..0000000 +diff --git a/lucene/spatial-extras/ivy.xml b/lucene/spatial-extras/ivy.xml +index c3d982f..df67503 100644 +--- a/lucene/spatial-extras/ivy.xml ++++ b/lucene/spatial-extras/ivy.xml +@@ -25,8 +25,6 @@ + + + +- +- + + + +diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java +deleted file mode 100644 +index f77c578..0000000 +--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java ++++ /dev/null +@@ -1,157 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial.prefix.tree; +- +-import java.util.ArrayList; +-import java.util.List; +- +-import com.google.common.geometry.S2CellId; +-import com.google.common.geometry.S2LatLng; +-import com.google.common.geometry.S2Projections; +-import org.apache.lucene.util.BytesRef; +-import org.locationtech.spatial4j.context.SpatialContext; +-import org.locationtech.spatial4j.distance.DistanceUtils; +-import org.locationtech.spatial4j.shape.Point; +-import org.locationtech.spatial4j.shape.Shape; +- +-/** +- * Spatial prefix tree for S2 Geometry. Shape factories +- * for the given {@link SpatialContext} must implement the interface {@link S2ShapeFactory}. +- * +- * The tree can be configured on how it divided itself by providing an arity. The default arity is 1 +- * which divided every sub-cell in 4 (except the first level that is always divided by 6) . Arity 2 +- * divides sub-cells in 16 and arity 3 in 64 sub-cells. +- * +- * @lucene.experimental +- */ +-public class S2PrefixTree extends SpatialPrefixTree { +- +- +- /** +- * Factory for creating {@link S2PrefixTree} instances with useful defaults +- */ +- protected static class Factory extends SpatialPrefixTreeFactory { +- +- @Override +- protected int getLevelForDistance(double degrees) { +- S2PrefixTree grid = new S2PrefixTree(ctx, S2PrefixTree.getMaxLevels(1)); +- return grid.getLevelForDistance(degrees); +- } +- +- @Override +- protected SpatialPrefixTree newSPT() { +- return new S2PrefixTree(ctx, +- maxLevels != null ? maxLevels : S2PrefixTree.getMaxLevels(1)); +- } +- +- } +- +- //factory to generate S2 cell shapes +- protected final S2ShapeFactory s2ShapeFactory; +- protected final int arity; +- +- /** +- * Creates a S2 spatial tree with arity 1. +- * +- * @param ctx The provided spatial context. The shape factor of the spatial context +- * must implement {@link S2ShapeFactory} +- * @param maxLevels The provided maximum level for this tree. +- */ +- public S2PrefixTree(SpatialContext ctx, int maxLevels) { +- this(ctx, maxLevels, 1); +- } +- +- /** +- * Creates a S2 spatial tree with provided arity. +- * +- * @param ctx The provided spatial context. The shape factor of the spatial context +- * must implement {@link S2ShapeFactory} +- * @param maxLevels The provided maximum level for this tree. +- * @param arity The arity of the tree. +- */ +- public S2PrefixTree(SpatialContext ctx, int maxLevels, int arity) { +- super(ctx, maxLevels); +- if (!(ctx.getShapeFactory() instanceof S2ShapeFactory)) { +- throw new IllegalArgumentException("Spatial context does not support S2 spatial index."); +- } +- this.s2ShapeFactory = (S2ShapeFactory) ctx.getShapeFactory(); +- if (arity <1 || arity > 3) { +- throw new IllegalArgumentException("Invalid value for S2 tree arity. Possible values are 1, 2 or 3. Provided value is " + arity + "."); +- } +- this.arity = arity; +- } +- +- /** +- * Get max levels for this spatial tree. +- * +- * @param arity The arity of the tree. +- * @return The maximum number of levels by the provided arity. +- */ +- public static int getMaxLevels(int arity) { +- return S2CellId.MAX_LEVEL/arity + 1; +- } +- +- @Override +- public int getLevelForDistance(double dist) { +- if (dist == 0){ +- return maxLevels; +- } +- int level = S2Projections.MAX_WIDTH.getMinLevel(dist * DistanceUtils.DEGREES_TO_RADIANS); +- int roundLevel = level % arity != 0 ? 1 : 0; +- level = level/arity + roundLevel; +- return Math.min(maxLevels, level + 1); +- } +- +- @Override +- public double getDistanceForLevel(int level) { +- if (level == 0) { +- return 180; +- } +- return S2Projections.MAX_WIDTH.getValue(arity * (level - 1)) * DistanceUtils.RADIANS_TO_DEGREES; +- } +- +- @Override +- public Cell getWorldCell() { +- return new S2PrefixTreeCell(this, null); +- } +- +- @Override +- public Cell readCell(BytesRef term, Cell scratch) { +- S2PrefixTreeCell cell = (S2PrefixTreeCell) scratch; +- if (cell == null) { +- cell = (S2PrefixTreeCell) getWorldCell(); +- } +- cell.readCell(this, term); +- return cell; +- } +- +- @Override +- public CellIterator getTreeCellIterator(Shape shape, int detailLevel) { +- if (!(shape instanceof Point)) { +- return super.getTreeCellIterator(shape, detailLevel); +- } +- Point p = (Point) shape; +- S2CellId id = S2CellId.fromLatLng(S2LatLng.fromDegrees(p.getY(), p.getX())).parent(arity * (detailLevel - 1)); +- List cells = new ArrayList<>(detailLevel); +- for (int i=0; i < detailLevel - 1; i++) { +- cells.add(new S2PrefixTreeCell(this, id.parent(i * arity))); +- } +- cells.add(new S2PrefixTreeCell(this, id)); +- return new FilterCellIterator(cells.iterator(), null); +- } +-} +\ No newline at end of file +diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java +deleted file mode 100644 +index e9b5818..0000000 +--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java ++++ /dev/null +@@ -1,297 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial.prefix.tree; +- +-import java.util.ArrayList; +-import java.util.HashMap; +-import java.util.List; +-import java.util.Map; +-import java.util.Objects; +- +-import com.google.common.geometry.S2CellId; +-import org.apache.lucene.util.BytesRef; +-import org.locationtech.spatial4j.shape.Shape; +-import org.locationtech.spatial4j.shape.SpatialRelation; +- +-/** +- * This class represents a S2 pixel in the RPT. +- * +- * @lucene.internal +- */ +-class S2PrefixTreeCell implements CellCanPrune { +- +- //Faces of S2 Geometry +- private static S2CellId[] FACES = new S2CellId[6]; +- +- static { +- FACES[0] = S2CellId.fromFacePosLevel(0, 0, 0); +- FACES[1] = S2CellId.fromFacePosLevel(1, 0, 0); +- FACES[2] = S2CellId.fromFacePosLevel(2, 0, 0); +- FACES[3] = S2CellId.fromFacePosLevel(3, 0, 0); +- FACES[4] = S2CellId.fromFacePosLevel(4, 0, 0); +- FACES[5] = S2CellId.fromFacePosLevel(5, 0, 0); +- } +- +- /*Special character to define a cell leaf*/ +- private static final byte LEAF = '+'; +- /*Tokens are used to serialize cells*/ +- private static final byte[] TOKENS = {'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', +- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', +- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; +- /*Map containing mapping between tokens and integer values*/ +- private static final Map PIXELS; +- +- static { +- PIXELS = new HashMap<>(TOKENS.length); +- for (int i = 0; i < TOKENS.length; i++) { +- PIXELS.put(TOKENS[i], i); +- } +- } +- +- S2CellId cellId; +- int level; //cache level +- S2PrefixTree tree; +- +- SpatialRelation shapeRel = null; +- boolean isLeaf; +- Shape shape = null; +- +- S2PrefixTreeCell(S2PrefixTree tree, S2CellId cellId) { +- this.cellId = cellId; +- this.tree = tree; +- setLevel(); +- if (getLevel() == tree.getMaxLevels()) { +- setLeaf(); +- } +- } +- +- void readCell(S2PrefixTree tree, BytesRef ref) { +- isLeaf = false; +- shape = null; +- shapeRel = null; +- this.tree = tree; +- cellId = getS2CellIdFromBytesRef(ref); +- setLevel(); +- if (isLeaf(ref) || getLevel() == tree.getMaxLevels()) { +- setLeaf(); +- } +- } +- +- @Override +- public SpatialRelation getShapeRel() { +- return shapeRel; +- } +- +- @Override +- public void setShapeRel(SpatialRelation rel) { +- shapeRel = rel; +- } +- +- @Override +- public boolean isLeaf() { +- return isLeaf; +- } +- +- @Override +- public void setLeaf() { +- isLeaf = true; +- } +- +- @Override +- public BytesRef getTokenBytesWithLeaf(BytesRef result) { +- result = getTokenBytesNoLeaf(result); +- //max levels do not have leaf +- if (isLeaf() && !(getLevel() == tree.getMaxLevels())) { +- //Add leaf byte +- result.bytes[result.offset + result.length] = LEAF; +- result.length++; +- } +- return result; +- } +- +- @Override +- public BytesRef getTokenBytesNoLeaf(BytesRef result) { +- if (result == null) { +- result = new BytesRef(); +- } +- getBytesRefFromS2CellId(cellId, result); +- return result; +- } +- +- @Override +- public int getLevel() { +- return this.level; +- } +- +- /** +- * Cache level of cell. +- */ +- private void setLevel() { +- if (this.cellId == null) { +- this.level = 0; +- } else { +- assert cellId.level() % tree.arity == 0; +- this.level = (this.cellId.level() / tree.arity) + 1; +- } +- } +- +- @Override +- public CellIterator getNextLevelCells(Shape shapeFilter) { +- S2CellId[] children; +- if (cellId == null) { // this is the world cell +- children = FACES; +- } else { +- int nChildren = (int) Math.pow(4, tree.arity); +- children = new S2CellId[nChildren]; +- children[0] = cellId.childBegin(cellId.level() + tree.arity); +- for (int i = 1; i < nChildren; i++) { +- children[i] = children[i - 1].next(); +- } +- } +- List cells = new ArrayList<>(children.length); +- for (S2CellId pixel : children) { +- cells.add(new S2PrefixTreeCell(tree, pixel)); +- } +- return new FilterCellIterator(cells.iterator(), shapeFilter); +- } +- +- @Override +- public Shape getShape() { +- if (shape == null) { +- if (cellId == null) { //World cell +- shape = tree.getSpatialContext().getWorldBounds(); +- } else { +- shape = tree.s2ShapeFactory.getS2CellShape(cellId); +- } +- } +- return shape; +- } +- +- @Override +- public boolean isPrefixOf(Cell c) { +- if (cellId == null) { +- return true; +- } +- S2PrefixTreeCell cell = (S2PrefixTreeCell) c; +- return cellId.contains(cell.cellId); +- } +- +- @Override +- public int compareToNoLeaf(Cell fromCell) { +- if (cellId == null) { +- return 1; +- } +- S2PrefixTreeCell cell = (S2PrefixTreeCell) fromCell; +- return cellId.compareTo(cell.cellId); +- } +- +- /** +- * Check if a cell is a leaf. +- * +- * @param ref The Byteref of the leaf +- * @return true if it is a leaf, e.g last byte is the special Character. +- */ +- private boolean isLeaf(BytesRef ref) { +- return (ref.bytes[ref.offset + ref.length - 1] == LEAF); +- } +- +- /** +- * Get the {@link S2CellId} from the {@link BytesRef} representation. +- * +- * @param ref The bytes. +- * @return the corresponding S2 cell. +- */ +- private S2CellId getS2CellIdFromBytesRef(BytesRef ref) { +- int length = ref.length; +- if (isLeaf(ref)) { +- length--; +- } +- if (length == 0) { +- return null; //world cell +- } +- int face = PIXELS.get(ref.bytes[ref.offset]); +- S2CellId cellId = FACES[face]; +- long id = cellId.id(); +- for (int i = ref.offset + 1; i < ref.offset + length; i++) { +- int thisLevel = i - ref.offset; +- int pos = PIXELS.get(ref.bytes[i]); +- // first child at level +- id = id - (id & -id) + (1L << (2 * (S2CellId.MAX_LEVEL - thisLevel * tree.arity))); +- // next until pos +- id = id + pos * ((id & -id) << 1); +- } +- return new S2CellId(id); +- } +- +- /** +- * Codify a {@link S2CellId} into its {@link BytesRef} representation. +- * +- * @param cellId The S2 Cell id to codify. +- * @param bref The byteref representation. +- */ +- private void getBytesRefFromS2CellId(S2CellId cellId, BytesRef bref) { +- if (cellId == null) {//world cell +- bref.length = 0; +- return; +- } +- int length = getLevel() + 1; +- byte[] b = bref.bytes.length >= length ? bref.bytes : new byte[length]; +- b[0] = TOKENS[cellId.face()]; +- for (int i = 1; i < getLevel(); i++) { +- int offset = 0; +- int level = tree.arity * i; +- for (int j = 1; j < tree.arity; j++) { +- offset = 4 * offset + cellId.childPosition(level - tree.arity + j); +- } +- b[i] = TOKENS[4 * offset + cellId.childPosition(level)]; +- } +- bref.bytes = b; +- bref.length = getLevel(); +- bref.offset = 0; +- } +- +- @Override +- public int getSubCellsSize() { +- if (cellId == null) { //root node +- return 6; +- } +- return (int) Math.pow(4, tree.arity); +- } +- +- @Override +- public int hashCode() { +- if (cellId == null) { +- return super.hashCode(); +- } +- return this.cellId.hashCode(); +- } +- +- @Override +- public boolean equals(Object o) { +- S2PrefixTreeCell cell = (S2PrefixTreeCell) o; +- return Objects.equals(cellId, cell.cellId); +- } +- +- @Override +- public String toString() { +- if (cellId == null) { +- return "0"; +- } +- return cellId.toString(); +- } +-} +\ No newline at end of file +diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java +deleted file mode 100644 +index 1306f60..0000000 +--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java ++++ /dev/null +@@ -1,40 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial.prefix.tree; +- +- +-import com.google.common.geometry.S2CellId; +-import org.locationtech.spatial4j.shape.Shape; +-import org.locationtech.spatial4j.shape.ShapeFactory; +- +-/** +- * Shape factory for Spatial contexts that support S2 geometry. It is an extension of +- * Spatial4j {@link ShapeFactory}. +- * +- * @lucene.experimental +- */ +-public interface S2ShapeFactory extends ShapeFactory{ +- +- /** +- * Factory method for S2 cell shapes. +- * +- * @param cellId The S2 cell id +- * @return the shape representing the cell. +- */ +- Shape getS2CellShape(S2CellId cellId); +-} +diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java +index d88e41a..6e537dd 100644 +--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java ++++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java +@@ -54,8 +54,6 @@ public abstract class SpatialPrefixTreeFactory { + instance = new QuadPrefixTree.Factory(); + else if ("packedQuad".equalsIgnoreCase(cname)) + instance = new PackedQuadPrefixTree.Factory(); +- else if ("s2".equalsIgnoreCase(cname)) +- instance = new S2PrefixTree.Factory(); + else { + try { + Class c = classLoader.loadClass(cname); +diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java +index 071c775..5c03f20 100644 +--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java ++++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java +@@ -20,10 +20,6 @@ package org.apache.lucene.spatial.spatial4j; + import java.util.ArrayList; + import java.util.List; + +-import com.google.common.geometry.S2Cell; +-import com.google.common.geometry.S2CellId; +-import com.google.common.geometry.S2Point; +-import org.apache.lucene.spatial.prefix.tree.S2ShapeFactory; + import org.apache.lucene.spatial3d.geom.GeoBBox; + import org.apache.lucene.spatial3d.geom.GeoBBoxFactory; + import org.apache.lucene.spatial3d.geom.GeoCircle; +@@ -36,7 +32,6 @@ import org.apache.lucene.spatial3d.geom.GeoPointShape; + import org.apache.lucene.spatial3d.geom.GeoPointShapeFactory; + import org.apache.lucene.spatial3d.geom.GeoPolygon; + import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; +-import org.apache.lucene.spatial3d.geom.GeoS2ShapeFactory; + import org.apache.lucene.spatial3d.geom.PlanetModel; + import org.locationtech.spatial4j.context.SpatialContext; + import org.locationtech.spatial4j.context.SpatialContextFactory; +@@ -47,13 +42,14 @@ import org.locationtech.spatial4j.shape.Point; + import org.locationtech.spatial4j.shape.Rectangle; + import org.locationtech.spatial4j.shape.Shape; + import org.locationtech.spatial4j.shape.ShapeCollection; ++import org.locationtech.spatial4j.shape.ShapeFactory; + + /** +- * Geo3d implementation of {@link S2ShapeFactory} ++ * Geo3d implementation of {@link ShapeFactory} + * + * @lucene.experimental + */ +-public class Geo3dShapeFactory implements S2ShapeFactory { ++public class Geo3dShapeFactory implements ShapeFactory { + + private final boolean normWrapLongitude; + private SpatialContext context; +@@ -241,20 +237,6 @@ public class Geo3dShapeFactory implements S2ShapeFactory { + return new Geo3dMultiPolygonBuilder(); + } + +- @Override +- public Shape getS2CellShape(S2CellId cellId) { +- S2Cell cell = new S2Cell(cellId); +- GeoPoint point1 = getGeoPoint(cell.getVertexRaw(0)); +- GeoPoint point2 = getGeoPoint(cell.getVertexRaw(1)); +- GeoPoint point3 = getGeoPoint(cell.getVertexRaw(2)); +- GeoPoint point4 = getGeoPoint(cell.getVertexRaw(3)); +- return new Geo3dShape<>(GeoS2ShapeFactory.makeGeoS2Shape(planetModel, point1, point2, point3, point4), context); +- } +- +- private GeoPoint getGeoPoint(S2Point point) { +- return planetModel.createSurfacePoint(point.get(0), point.get(1), point.get(2)); +- } +- + /** + * Geo3d implementation of {@link org.locationtech.spatial4j.shape.ShapeFactory.PointsBuilder} interface to + * generate {@link GeoPoint}. +diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java +deleted file mode 100644 +index f3bfe3e..0000000 +--- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java ++++ /dev/null +@@ -1,113 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial.prefix.tree; +- +-import com.carrotsearch.randomizedtesting.annotations.Repeat; +-import com.google.common.geometry.S2CellId; +-import com.google.common.geometry.S2Projections; +-import org.apache.lucene.spatial.spatial4j.Geo3dSpatialContextFactory; +-import org.apache.lucene.util.BytesRef; +-import org.apache.lucene.util.LuceneTestCase; +-import org.junit.Test; +-import org.locationtech.spatial4j.context.SpatialContext; +-import org.locationtech.spatial4j.shape.Point; +- +-/** +- * Test for S2 Spatial prefix tree. +- */ +-public class S2PrefixTreeTest extends LuceneTestCase{ +- +- @Test +- @Repeat(iterations = 10) +- public void testCells() { +- int face = random().nextInt(6); +- S2CellId id = S2CellId.fromFacePosLevel(face, 0, 0); +- int arity = random().nextInt(3) + 1; +- int level = random().nextInt(S2PrefixTree.getMaxLevels(arity)); +- level = level * arity; +- for (int i = 0; i < level; i++) { +- int pos = random().nextInt(4); +- id = id.childBegin(); +- if (pos == 0) continue; +- id = id.next(); +- if (pos == 1) continue; +- id = id.next(); +- if (pos == 2) continue; +- id = id.next(); +- } +- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(arity), arity); +- S2PrefixTreeCell cell = new S2PrefixTreeCell(tree, id); +- BytesRef ref = cell.getTokenBytesWithLeaf(null); +- if (random().nextBoolean()) { +- int newOffset = random().nextInt(10) + 1; +- byte[] newBytes = new byte[ref.bytes.length + newOffset]; +- for (int i = 0; i < ref.bytes.length; i++) { +- newBytes[i + newOffset] = ref.bytes[i]; +- } +- ref.bytes = newBytes; +- ref.offset = ref.offset + newOffset; +- } +- S2PrefixTreeCell cell2 = new S2PrefixTreeCell(tree, null); +- cell2.readCell(tree, ref); +- assertEquals(cell, cell2); +- } +- +- @Test +- @Repeat(iterations = 10) +- public void testDistanceAndLevels() { +- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(1), 1); +- +- double randomDist = random().nextDouble() * 5; +- int levelDistance = tree.getLevelForDistance(randomDist); +- double distanceLevel = tree.getDistanceForLevel(levelDistance); +- assertTrue(randomDist > distanceLevel); +- +- +- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(2), 2); +- +- levelDistance = tree.getLevelForDistance(randomDist); +- distanceLevel = tree.getDistanceForLevel(levelDistance); +- assertTrue(randomDist > distanceLevel); +- +- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(3), 3); +- +- levelDistance = tree.getLevelForDistance(randomDist); +- distanceLevel = tree.getDistanceForLevel(levelDistance); +- assertTrue(randomDist > distanceLevel); +- +- } +- +- @Test +- @Repeat(iterations = 10) +- public void testPrecision() { +- int arity = random().nextInt(3) +1; +- SpatialContext context = new Geo3dSpatialContextFactory().newSpatialContext(); +- S2PrefixTree tree = new S2PrefixTree(context, S2PrefixTree.getMaxLevels(arity), arity); +- double precision = random().nextDouble(); +- int level = tree.getLevelForDistance(precision); +- Point point = context.getShapeFactory().pointXY(0, 0); +- CellIterator iterator = tree.getTreeCellIterator(point, level); +- S2PrefixTreeCell cell = null; +- while (iterator.hasNext()) { +- cell = (S2PrefixTreeCell)iterator.next(); +- } +- assertTrue(cell.getLevel() == level); +- double precisionCell = S2Projections.MAX_WIDTH.getValue(cell.cellId.level()); +- assertTrue(precision > precisionCell); +- } +-} +\ No newline at end of file +diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java +index 327b65c..cc4cd31 100644 +--- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java ++++ b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java +@@ -27,8 +27,6 @@ import org.apache.lucene.spatial.composite.CompositeSpatialStrategy; + import org.apache.lucene.spatial.prefix.RandomSpatialOpStrategyTestCase; + import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy; + import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree; +-import org.apache.lucene.spatial.prefix.tree.QuadPrefixTree; +-import org.apache.lucene.spatial.prefix.tree.S2PrefixTree; + import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree; + import org.apache.lucene.spatial.query.SpatialOperation; + import org.apache.lucene.spatial.serialized.SerializedDVStrategy; +@@ -36,7 +34,6 @@ import org.apache.lucene.spatial3d.geom.GeoAreaShape; + import org.apache.lucene.spatial3d.geom.GeoPath; + import org.apache.lucene.spatial3d.geom.GeoPathFactory; + import org.apache.lucene.spatial3d.geom.GeoPoint; +-import org.apache.lucene.spatial3d.geom.GeoPointShape; + import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; + import org.apache.lucene.spatial3d.geom.PlanetModel; + import org.apache.lucene.spatial3d.geom.RandomGeo3dShapeGenerator; +@@ -53,18 +50,9 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { + private SpatialPrefixTree grid; + private RecursivePrefixTreeStrategy rptStrategy; + +- private void setupGrid() { +- int type = random().nextInt(4); +- if (type == 0) { +- this.grid = new GeohashPrefixTree(ctx, 2); +- } else if (type == 1) { +- this.grid = new QuadPrefixTree(ctx, 5); +- } else { +- int arity = random().nextInt(3) + 1; +- this.grid = new S2PrefixTree(ctx, 5 - arity, arity); +- } ++ private void setupGeohashGrid() { ++ this.grid = new GeohashPrefixTree(ctx, 2);//A fairly shallow grid + this.rptStrategy = newRPT(); +- this.rptStrategy.setPruneLeafyBranches(random().nextBoolean()); + } + + protected RecursivePrefixTreeStrategy newRPT() { +@@ -81,7 +69,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { + factory.planetModel = planetModel; + ctx = factory.newSpatialContext(); + +- setupGrid(); ++ setupGeohashGrid(); + + SerializedDVStrategy serializedDVStrategy = new SerializedDVStrategy(ctx, getClass().getSimpleName() + "_sdv"); + this.strategy = new CompositeSpatialStrategy("composite_" + getClass().getSimpleName(), +@@ -123,7 +111,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { + } + + @Test +- @Repeat(iterations = 30) ++ @Repeat(iterations = 10) + public void testOperations() throws IOException { + setupStrategy(); + +@@ -134,9 +122,6 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { + protected Shape randomIndexedShape() { + int type = shapeGenerator.randomShapeType(); + GeoAreaShape areaShape = shapeGenerator.randomGeoAreaShape(type, planetModel); +- if (areaShape instanceof GeoPointShape) { +- return new Geo3dPointShape((GeoPointShape) areaShape, ctx); +- } + return new Geo3dShape<>(areaShape, ctx); + } + +diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java +deleted file mode 100644 +index b4c5d06..0000000 +--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java ++++ /dev/null +@@ -1,202 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial3d.geom; +- +-import java.io.IOException; +-import java.io.InputStream; +-import java.io.OutputStream; +- +-/** +- * Fast implementation of a polygon representing S2 geometry cell. There are no checks validating that +- * points are convex therefore users must be provide four points in CCW or the logic will fail. +- * +- * @lucene.internal +- */ +-class GeoS2Shape extends GeoBasePolygon { +- +- /** The first point */ +- protected final GeoPoint point1; +- /** The second point */ +- protected final GeoPoint point2; +- /** The third point */ +- protected final GeoPoint point3; +- /** The fourth point */ +- protected final GeoPoint point4; +- +- /** The first plane */ +- protected final SidedPlane plane1; +- /** The second plane */ +- protected final SidedPlane plane2; +- /** The third plane */ +- protected final SidedPlane plane3; +- /** The fourth plane */ +- protected final SidedPlane plane4; +- +- /** Notable points for the first plane */ +- protected final GeoPoint[] plane1Points; +- /** Notable points for second plane */ +- protected final GeoPoint[] plane2Points; +- /** Notable points for third plane */ +- protected final GeoPoint[] plane3Points; +- /** Notable points for fourth plane */ +- protected final GeoPoint[] plane4Points; +- +- /** Edge point for this S2 cell */ +- protected final GeoPoint[] edgePoints; +- +- /** +- * It builds from 4 points given in CCW. It must be convex or logic will fail. +- * +- *@param planetModel is the planet model. +- *@param point1 the first point. +- *@param point2 the second point. +- *@param point3 the third point. +- *@param point4 the four point. +- */ +- public GeoS2Shape(final PlanetModel planetModel, GeoPoint point1, GeoPoint point2, GeoPoint point3, GeoPoint point4) { +- super(planetModel); +- this.point1 = point1; +- this.point2 = point2; +- this.point3 = point3; +- this.point4 = point4; +- +- // Now build the four planes +- this.plane1 = new SidedPlane(point4, point1, point2); +- this.plane2 = new SidedPlane(point1, point2, point3); +- this.plane3 = new SidedPlane(point2, point3, point4); +- this.plane4 = new SidedPlane(point3, point4, point1); +- +- //collect the notable points for the planes +- this.plane1Points = new GeoPoint[]{point1, point2}; +- this.plane2Points = new GeoPoint[]{point2, point3}; +- this.plane3Points = new GeoPoint[]{point3, point4}; +- this.plane4Points = new GeoPoint[]{point4, point1}; +- +- this.edgePoints = new GeoPoint[]{point1}; +- } +- +- /** +- * Constructor for deserialization. +- * @param planetModel is the planet model. +- * @param inputStream is the input stream. +- */ +- public GeoS2Shape(final PlanetModel planetModel, final InputStream inputStream) throws IOException { +- this(planetModel, +- (GeoPoint) SerializableObject.readObject(inputStream), +- (GeoPoint) SerializableObject.readObject(inputStream), +- (GeoPoint) SerializableObject.readObject(inputStream), +- (GeoPoint) SerializableObject.readObject(inputStream)); +- } +- +- @Override +- public void write(final OutputStream outputStream) throws IOException { +- SerializableObject.writeObject(outputStream, point1); +- SerializableObject.writeObject(outputStream, point2); +- SerializableObject.writeObject(outputStream, point3); +- SerializableObject.writeObject(outputStream, point4); +- } +- +- +- @Override +- public boolean isWithin(final double x, final double y, final double z) { +- return plane1.isWithin(x, y, z) && +- plane2.isWithin(x, y, z) && +- plane3.isWithin(x, y, z) && +- plane4.isWithin(x, y, z); +- } +- +- +- @Override +- public GeoPoint[] getEdgePoints() { +- return edgePoints; +- } +- +- @Override +- public boolean intersects(final Plane p, final GeoPoint[] notablePoints, final Membership... bounds) { +- return p.intersects(planetModel, plane1, notablePoints, plane1Points, bounds, plane2, plane4) || +- p.intersects(planetModel, plane2, notablePoints, plane2Points, bounds, plane3, plane1) || +- p.intersects(planetModel, plane3, notablePoints, plane3Points, bounds, plane4, plane2) || +- p.intersects(planetModel, plane4, notablePoints, plane4Points, bounds, plane1, plane3); +- } +- +- @Override +- public boolean intersects(GeoShape geoShape) { +- return geoShape.intersects(plane1, plane1Points, plane2, plane4) || +- geoShape.intersects(plane2, plane2Points, plane3, plane1) || +- geoShape.intersects(plane3, plane3Points, plane4, plane2) || +- geoShape.intersects(plane4, plane4Points, plane1, plane3); +- } +- +- @Override +- public void getBounds(Bounds bounds) { +- super.getBounds(bounds); +- bounds.addPlane(planetModel, plane1, plane2, plane4) +- .addPlane(planetModel, plane2, plane3, plane1) +- .addPlane(planetModel, plane3, plane4, plane2) +- .addPlane(planetModel, plane4, plane1, plane3) +- .addPoint(point1).addPoint(point2).addPoint(point3).addPoint(point4); +- } +- +- @Override +- public double outsideDistance(DistanceStyle distanceStyle, double x, double y, double z) { +- final double planeDistance1 = distanceStyle.computeDistance(planetModel, plane1, x,y,z, plane2, plane4); +- final double planeDistance2 = distanceStyle.computeDistance(planetModel, plane2, x,y,z, plane3, plane1); +- final double planeDistance3 = distanceStyle.computeDistance(planetModel, plane3, x,y,z, plane4, plane2); +- final double planeDistance4 = distanceStyle.computeDistance(planetModel, plane4, x,y,z, plane1, plane3); +- +- final double pointDistance1 = distanceStyle.computeDistance(point1, x,y,z); +- final double pointDistance2 = distanceStyle.computeDistance(point2, x,y,z); +- final double pointDistance3 = distanceStyle.computeDistance(point3, x,y,z); +- final double pointDistance4 = distanceStyle.computeDistance(point4, x,y,z); +- +- return Math.min( +- Math.min( +- Math.min(planeDistance1, planeDistance2), +- Math.min(planeDistance3, planeDistance4)), +- Math.min( +- Math.min(pointDistance1, pointDistance2), +- Math.min(pointDistance3, pointDistance4))); +- } +- +- @Override +- public boolean equals(Object o) { +- if (!(o instanceof GeoS2Shape)) +- return false; +- GeoS2Shape other = (GeoS2Shape) o; +- return super.equals(other) && other.point1.equals(point1) +- && other.point2.equals(point2) && other.point3.equals(point3) +- && other.point4.equals(point4); +- } +- +- @Override +- public int hashCode() { +- int result = super.hashCode(); +- result = 31 * result + point1.hashCode(); +- result = 31 * result + point2.hashCode(); +- result = 31 * result + point3.hashCode(); +- result = 31 * result + point4.hashCode(); +- return result; +- } +- +- @Override +- public String toString() { +- return "GeoS2Shape: {planetmodel="+planetModel+", point1=" + point1 +", point2=" + point2 +", point3=" + point3 +", point4=" + point4+ "}"; +- } +- +-} +- +diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java +deleted file mode 100644 +index 848b2e6..0000000 +--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java ++++ /dev/null +@@ -1,50 +0,0 @@ +-/* +- * 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. +- */ +- +-package org.apache.lucene.spatial3d.geom; +- +-/** +- * Class which constructs a GeoPolygon representing S2 google pixel. +- * +- * @lucene.experimental +- */ +-public class GeoS2ShapeFactory { +- +- private GeoS2ShapeFactory() { +- } +- +- /** +- * Creates a convex polygon with 4 planes by providing 4 points in CCW. +- * This is a very fast shape and there are no checks that the points currently define +- * a convex shape. +- * +- * @param planetModel The planet model +- * @param point1 the first point. +- * @param point2 the second point. +- * @param point3 the third point. +- * @param point4 the four point. +- * @return the generated shape. +- */ +- public static GeoPolygon makeGeoS2Shape(final PlanetModel planetModel, +- final GeoPoint point1, +- final GeoPoint point2, +- final GeoPoint point3, +- final GeoPoint point4) { +- return new GeoS2Shape(planetModel, point1, point2, point3, point4); +- } +-} +- +diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java +index 4e0acae..bcebf43 100644 +--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java ++++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java +@@ -75,7 +75,6 @@ class StandardObjects { + classRegsitry.put(PlanetModel.class, 35); + classRegsitry.put(GeoDegeneratePath.class, 36); + classRegsitry.put(GeoExactCircle.class, 37); +- classRegsitry.put(GeoS2Shape.class, 38); + + for (Class clazz : classRegsitry.keySet()){ + codeRegsitry.put(classRegsitry.get(clazz), clazz); +-- +2.20.1 + diff --git a/SPECS/lucene.spec b/SPECS/lucene.spec new file mode 100644 index 0000000..61bff07 --- /dev/null +++ b/SPECS/lucene.spec @@ -0,0 +1,533 @@ +%bcond_with jp_minimal + +Summary: High-performance, full-featured text search engine +Name: lucene +Version: 8.1.1 +Release: 2%{?dist} +Epoch: 0 +License: ASL 2.0 +URL: http://lucene.apache.org/ +# solr source contains both lucene and dev-tools +Source0: https://archive.apache.org/dist/lucene/solr/%{version}/solr-%{version}-src.tgz + +Patch0: 0001-Disable-ivy-settings.patch +Patch1: 0002-Dependency-generation.patch + +# io.sgr:s2-geometry-library-java is not present on Fedora +# This patch reverts these two commits: +# https://github.com/apache/lucene-solr/commit/e3032dd3fcc28570c5f9d2dab4961b5b07555912 +# https://github.com/apache/lucene-solr/commit/e0d6465af94b6c6f7b8d570dee97c98de572c876 +Patch2: 0003-Remove-dep-on-missing-google-geometry-library.patch + +BuildRequires: ant +BuildRequires: ivy-local +BuildRequires: maven-local +BuildRequires: mvn(org.apache:apache:pom:) +BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) +%if %{without jp_minimal} +BuildRequires: mvn(com.carrotsearch.randomizedtesting:randomizedtesting-runner) +BuildRequires: mvn(com.ibm.icu:icu4j) +BuildRequires: mvn(commons-codec:commons-codec) +BuildRequires: mvn(commons-logging:commons-logging) +BuildRequires: mvn(javax.servlet:javax.servlet-api) +BuildRequires: mvn(javax.servlet:servlet-api) +BuildRequires: mvn(junit:junit) +BuildRequires: mvn(net.sourceforge.nekohtml:nekohtml) +BuildRequires: mvn(org.antlr:antlr4-runtime) +BuildRequires: mvn(org.apache.commons:commons-compress) +BuildRequires: mvn(org.apache.httpcomponents:httpclient) +BuildRequires: mvn(org.apache.httpcomponents:httpcore) +BuildRequires: mvn(org.carrot2:morfologik-fsa) +BuildRequires: mvn(org.carrot2:morfologik-polish) +BuildRequires: mvn(org.carrot2:morfologik-stemming) +BuildRequires: mvn(org.eclipse.jetty:jetty-continuation) +BuildRequires: mvn(org.eclipse.jetty:jetty-http) +BuildRequires: mvn(org.eclipse.jetty:jetty-io) +BuildRequires: mvn(org.eclipse.jetty:jetty-server) +BuildRequires: mvn(org.eclipse.jetty:jetty-servlet) +BuildRequires: mvn(org.eclipse.jetty:jetty-util) +BuildRequires: mvn(org.locationtech.spatial4j:spatial4j) +BuildRequires: mvn(org.ow2.asm:asm) +BuildRequires: mvn(org.ow2.asm:asm-commons) +BuildRequires: mvn(xerces:xercesImpl) +%endif + +Provides: %{name}-core = %{epoch}:%{version}-%{release} + +BuildArch: noarch + +%description +Apache Lucene is a high-performance, full-featured text search +engine library written entirely in Java. It is a technology suitable +for nearly any application that requires full-text search, especially +cross-platform. + +%package analysis +Summary: Lucene Common Analyzers +# Obsoletes added in F30 +# This module was removed upstream and no replacement exists +Obsoletes: %{name}-analyzers-uima < %{version}-%{release} + +%description analysis +Lucene Common Analyzers. + +%package analyzers-smartcn +Summary: Smart Chinese Analyzer + +%description analyzers-smartcn +Lucene Smart Chinese Analyzer. + +%package grouping +Summary: Lucene Grouping Module + +%description grouping +Lucene Grouping Module. + +%package highlighter +Summary: Lucene Highlighter Module + +%description highlighter +Lucene Highlighter Module. + +%package join +Summary: Lucene Join Module + +%description join +Lucene Join Module. + +%package memory +Summary: Lucene Memory Module + +%description memory +High-performance single-document index to compare against Query. + +%package misc +Summary: Miscellaneous Lucene extensions + +%description misc +Miscellaneous Lucene extensions. + +%package queries +Summary: Lucene Queries Module + +%description queries +Lucene Queries Module. + +%package queryparser +Summary: Lucene QueryParsers Module + +%description queryparser +Lucene QueryParsers Module. + +%package sandbox +Summary: Lucene Sandbox Module + +%description sandbox +Lucene Sandbox Module. + +%package backward-codecs +Summary: Lucene Backward Codecs Module + +%description backward-codecs +Codecs for older versions of Lucene. + +%if %{without jp_minimal} +%package parent +Summary: Parent POM for Lucene + +%description parent +Parent POM for Lucene. + +%package solr-grandparent +Summary: Lucene Solr grandparent POM + +%description solr-grandparent +Lucene Solr grandparent POM. + +%package benchmark +Summary: Lucene Benchmarking Module + +%description benchmark +Lucene Benchmarking Module. + +%package replicator +Summary: Lucene Replicator Module + +%description replicator +Lucene Replicator Module. + +%package test-framework +Summary: Apache Lucene Java Test Framework + +%description test-framework +Apache Lucene Java Test Framework. + +%package expressions +Summary: Lucene Expressions Module + +%description expressions +Dynamically computed values to sort/facet/search on based on a pluggable +grammar. + +%package demo +Summary: Lucene Demo Module + +%description demo +Demo for Apache Lucene Java. + +%package classification +Summary: Lucene Classification Module + +%description classification +Lucene Classification Module. + +%package suggest +Summary: Lucene Suggest Module + +%description suggest +Lucene Suggest Module. + +%package facet +Summary: Lucene Facets Module + +%description facet +Package for Faceted Indexing and Search. + +%package spatial +Summary: Geospatial indexing APIs for Apache Lucene + +%description spatial +Geospatial indexing APIs for Apache Lucene. + +%package spatial-extras +Summary: Spatial Strategies for Apache Lucene + +%description spatial-extras +Spatial Strategies for Apache Lucene. + +%package spatial3d +Summary: Lucene Spatial 3D + +%description spatial3d +Spatial shapes implemented using 3D planar geometry + +%package codecs +Summary: Codecs and postings formats for Apache Lucene + +%description codecs +Codecs and postings formats for Apache Lucene. + +%package analyzers-phonetic +Summary: Lucene Phonetic Filters + +%description analyzers-phonetic +Provides phonetic encoding via Commons Codec. + +%package analyzers-icu +Summary: Lucene ICU Analysis Components + +%description analyzers-icu +Provides integration with ICU (International Components for Unicode) for +stronger Unicode and internationalization support. + +%package analyzers-morfologik +Summary: Lucene Morfologik Polish Lemmatizer + +%description analyzers-morfologik +A dictionary-driven lemmatizer for Polish (includes morphosyntactic +annotations). + +%package analyzers-nori +Summary: An analyzer with morphological analysis for Korean + +%description analyzers-nori +An analyzer with morphological analysis for Korean. + +%package analyzers-kuromoji +Summary: Lucene Kuromoji Japanese Morphological Analyzer + +%description analyzers-kuromoji +Lucene Kuromoji Japanese Morphological Analyzer. + +%package analyzers-stempel +Summary: Lucene Stempel Analyzer + +%description analyzers-stempel +Lucene Stempel Analyzer. + +%endif # without jp_minimal + +%package javadoc +Summary: Javadoc for Lucene + +%description javadoc +%{summary}. + +%prep +%setup -q -n solr-%{version} + +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 + +rm -rf solr + +find -name "*.jar" -delete + +# don't generate uses clauses in osgi metadata +sed -i -e "//a<_nouses>true" dev-tools/maven/pom.xml.template + +# make the target public +sed -i 's/-filter-pom-templates/filter-pom-templates/' lucene/common-build.xml + +# suggest provides spellchecker +%mvn_alias :%{name}-suggest :%{name}-spellchecker + +# compatibility with existing packages +%mvn_alias :%{name}-analyzers-common :%{name}-analyzers + +%mvn_package ":%{name}-analysis-modules-aggregator" %{name}-analysis +%mvn_package ":%{name}-analyzers-common" %{name}-analysis +%mvn_package ":{*}-aggregator" @1 + +%build +pushd %{name} +find -maxdepth 2 -type d -exec mkdir -p '{}/lib' \; +# generate dependencies +ant -f common-build.xml filter-pom-templates -Divy.mode=local -Dversion=%{version} -Divy.available=true + +# fix source dir + move to expected place +for pom in `find build/poms/%{name} -name pom.xml`; do + sed 's/\${module-path}/${basedir}/g' "$pom" > "${pom##build/poms/%{name}/}" +done +%pom_disable_module src/test core +%pom_disable_module src/test codecs + +# unresolvable test dep +%pom_remove_dep org.locationtech.spatial4j:spatial4j::test spatial-extras + +# currently unavailable in Fedora +%pom_remove_dep ua.net.nlp:morfologik-ukrainian-search analysis/morfologik + +# test deps +%pom_add_dep org.antlr:antlr-runtime::test demo + +popd + +mv lucene/build/poms/pom.xml . + +# deal with split packages in core/misc/analysis modules by adding additional metadata and +# require-bundling the core bundle from misc +%pom_xpath_set "pom:Export-Package" "*;version=\"%{version}\"" +%pom_add_plugin org.apache.felix:maven-bundle-plugin lucene/misc \ +" +org.apache.lucene.core;bundle-version=\"%{version}\" + + org.apache.lucene.document;version=\"%{version}\";misc=split;mandatory:=misc, + org.apache.lucene.index;version=\"%{version}\";misc=split;mandatory:=misc, + org.apache.lucene.search;version=\"%{version}\";misc=split;mandatory:=misc, + org.apache.lucene.store;version=\"%{version}\";misc=split;mandatory:=misc, + org.apache.lucene.util.fst;version=\"%{version}\";misc=split;mandatory:=misc, + *;version=\"%{version}\" +" +%pom_add_plugin org.apache.felix:maven-bundle-plugin lucene/analysis/common \ +" +org.apache.lucene.core;bundle-version=\"%{version}\" + + org.apache.lucene.analysis.standard;version=\"%{version}\";analysis=split;mandatory:=analysis, + *;version=\"%{version}\" +" + +%pom_disable_module solr +%pom_remove_plugin -r :gmaven-plugin +%pom_remove_plugin -r :maven-enforcer-plugin +%pom_remove_plugin -r :forbiddenapis +%pom_remove_plugin -r :buildnumber-maven-plugin + +%if %{with jp_minimal} +pushd lucene +%pom_disable_module codecs +%pom_disable_module test-framework +%pom_disable_module benchmark +%pom_disable_module classification +%pom_disable_module demo +%pom_disable_module expressions +%pom_disable_module facet +%pom_disable_module replicator +%pom_disable_module spatial +%pom_disable_module spatial-extras +%pom_disable_module spatial3d +%pom_disable_module suggest + +%pom_disable_module icu analysis +%pom_disable_module kuromoji analysis +%pom_disable_module morfologik analysis +%pom_disable_module phonetic analysis +%pom_disable_module stempel analysis +%pom_disable_module nori analysis +popd + +%mvn_package :lucene-parent __noinstall +%mvn_package :lucene-solr-grandparent __noinstall +%endif + +# OpenNLP is not new enough in Fedora, always disable for now +pushd lucene +%pom_disable_module opennlp analysis +popd + +# For some reason TestHtmlParser.testTurkish fails when building inside SCLs +%mvn_build -s -f + +%install +%mvn_install + +# Use the same directory of the main package for subpackage licence and docs +%global _docdir_fmt %{name} + +%files -f .mfiles-%{name}-core +%doc lucene/CHANGES.txt lucene/README.txt +%doc lucene/MIGRATE.txt lucene/JRE_VERSION_MIGRATION.txt +%license lucene/LICENSE.txt lucene/NOTICE.txt + +%files analysis -f .mfiles-%{name}-analysis +%files analyzers-smartcn -f .mfiles-%{name}-analyzers-smartcn +%files grouping -f .mfiles-%{name}-grouping +%files highlighter -f .mfiles-%{name}-highlighter +%files join -f .mfiles-%{name}-join +%files memory -f .mfiles-%{name}-memory +%files misc -f .mfiles-%{name}-misc +%files queries -f .mfiles-%{name}-queries +%files queryparser -f .mfiles-%{name}-queryparser +%files sandbox -f .mfiles-%{name}-sandbox +%files backward-codecs -f .mfiles-%{name}-backward-codecs +%if %{without jp_minimal} +%files parent -f .mfiles-%{name}-parent +%files solr-grandparent -f .mfiles-%{name}-solr-grandparent +%files benchmark -f .mfiles-%{name}-benchmark +%files replicator -f .mfiles-%{name}-replicator +%files test-framework -f .mfiles-%{name}-test-framework +%files expressions -f .mfiles-%{name}-expressions +%files demo -f .mfiles-%{name}-demo +%files classification -f .mfiles-%{name}-classification +%files suggest -f .mfiles-%{name}-suggest +%files facet -f .mfiles-%{name}-facet +%files spatial -f .mfiles-%{name}-spatial +%files spatial-extras -f .mfiles-%{name}-spatial-extras +%files spatial3d -f .mfiles-%{name}-spatial3d +%files codecs -f .mfiles-%{name}-codecs +%files analyzers-phonetic -f .mfiles-%{name}-analyzers-phonetic +%files analyzers-icu -f .mfiles-%{name}-analyzers-icu +%files analyzers-morfologik -f .mfiles-%{name}-analyzers-morfologik +%files analyzers-nori -f .mfiles-%{name}-analyzers-nori +%files analyzers-kuromoji -f .mfiles-%{name}-analyzers-kuromoji +%files analyzers-stempel -f .mfiles-%{name}-analyzers-stempel +%endif + +%files javadoc -f .mfiles-javadoc +%license lucene/LICENSE.txt lucene/NOTICE.txt + +%changelog +* Thu Jun 13 2019 Mat Booth - 0:8.1.1-2 +- Enable additional module in jp_minimal mode + +* Wed Jun 12 2019 Mat Booth - 0:8.1.1-1 +- Update to latest upstream release + +* Thu Feb 14 2019 Mat Booth - 0:7.7.0-1 +- Update to latest upstream release +- Drop deprecated uima analyzers sub-package +- Added nori Korean analyzers sub-package + +* Fri Feb 01 2019 Fedora Release Engineering - 0:7.1.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 0:7.1.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Apr 26 2018 Mat Booth - 0:7.1.0-2 +- Fix split package information in OSGi metadata + +* Thu Apr 12 2018 Mat Booth - 0:7.1.0-1 +- Update to a newer upstream release + +* Thu Feb 08 2018 Fedora Release Engineering - 0:6.1.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Dec 07 2017 Mat Booth - 0:6.1.0-7 +- Enable more modules in jp_minimal profile, rhbz#1455267 + +* Mon Oct 16 2017 Michael Simacek - 0:6.1.0-6 +- Backport fix for CVE-2017-12629 + +* Thu Sep 21 2017 Mat Booth - 0:6.1.0-5 +- Rebuild to regenerate OSGi metadata due to objectweb-asm update + +* Wed Jul 26 2017 Fedora Release Engineering - 0:6.1.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Apr 04 2017 Mat Booth - 0:6.1.0-3 +- Add better OSGi metadata for dealing with core/misc split packages +- Drop F24-specific hack + +* Tue Mar 21 2017 Michael Simacek - 0:6.1.0-2 +- Update jp_minimal conditional + +* Mon Mar 20 2017 Mat Booth - 0:6.1.0-1 +- Update to lucene 6 +- Add "spatial-extras" subpackage, this decouples dependencies on spatial4j. + +* Thu Mar 16 2017 Michael Simacek - 0:5.5.0-7 +- Add jp_minimal conditional + +* Mon Feb 06 2017 Michael Simacek - 0:5.5.0-6 +- Remove buildnumber-plugin + +* Mon Aug 22 2016 Roman Vais - 0:5.5.0-5 +- Removed test dependency macros for lucene demo that caused conflict (duplicity) + +* Wed Jul 13 2016 Roland Grunberg - 0:5.5.0-4 +- analyzers-common should have versioned requires on package from core. + +* Fri Jul 08 2016 Mat Booth - 0:5.5.0-3 +- Misc module should require core module, the split package + causes problems for OSGi consumers + +* Mon Apr 18 2016 Mat Booth - 0:5.5.0-2 +- Add missing BR on ant, fixes FTBFS + +* Wed Feb 24 2016 Michael Simacek - 0:5.5.0-1 +- Update to upstream version 5.5.0 + +* Thu Feb 04 2016 Fedora Release Engineering - 0:5.4.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jan 25 2016 Alexander Kurtakov 0:5.4.1-2 +- Organize Sources numbering. +- Drop old jpackage header - package has nothing in common anymore. +- Drop 3+ years old provides/obsoletes. +- Move old changelog to separate file to ease working with the spec file. + +* Mon Jan 25 2016 Alexander Kurtakov 0:5.4.1-1 +- Update to upstream 5.4.1 release. + +* Thu Jan 21 2016 Alexander Kurtakov 0:5.4.0-1 +- Update to upstream 5.4.0 release. + +* Tue Oct 6 2015 Alexander Kurtakov 0:5.3.1-1 +- Update to upstream 5.3.1 release. + +* Thu Aug 27 2015 Alexander Kurtakov 0:5.3.0-1 +- Update to upstream 5.3.0 release. + +* Wed Aug 26 2015 Mat Booth - 0:5.2.1-4 +- Remove forbidden SCL macros + +* Wed Jun 24 2015 Alexander Kurtakov 0:5.2.1-3 +- Disable generation of uses clauses in OSGi manifests. + +* Wed Jun 24 2015 Alexander Kurtakov 0:5.2.1-2 +- Drop old workarounds. + +* Tue Jun 23 2015 Alexander Kurtakov 0:5.2.1-1 +- Update to upstream 5.2.1.