Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Index RPT geospatial fields following upstream #713

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Index RPT geospatial fields following upstream
`RPT` appears to be an improvement over `LatLonType` and is [in Solr
>= 4.0.0][1].

[1]: https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.3.0/solr/CHANGES.txt#L8649

Schema excerpts are mostly taken from Solr 6.3.0:
* https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.3.0/solr/server/solr/configsets/basic_configs/conf/managed-schema#L157
* https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.3.0/solr/server/solr/configsets/basic_configs/conf/managed-schema#L557-L562

The schema excerpts from Solr 6.3.0 are adapted in order to work with
the Solr versions integrated with Riak 2.2.0 and 2.0.7
i.e. respectively Solr 4.10.4 and 4.7.0.  The only change involves the
distance unit.

Distance unit
====

Attribute name
----

In order to support Solr 4.10.4 and 4.7.0, prefer (now
[deprecated][2]) attribute `units` over `distanceUnits` introduced in
Solr 6.

[2]: apache/lucene-solr@8fd247c

Degrees vs. kilometers
----

Specify unit `degrees` rather than `kilometers` because that is the
only one supported in Solr 4.10.4 and 4.7.0.

Consequently adapt attribute `maxDistErr`: `maxDistErr="0.001"
distanceUnits="kilometers"` can be written roughly as
`maxDistErr="0.000009" units="degrees"`.

* From [Solr 4.7.0 reference guide][3] wrt `maxDistErr` (BTW this
  excerpt is the same in Solr 4.10.4 ref guide):

  > Defines the highest level of detail required for indexed data. If
  > left blank, the default is one meter – just a bit less than
  > 0.000009 degrees. This setting is used internally to compute an
  > appropriate maxLevels (see below).

  [3]: https://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-4.7.pdf

* See also [Solr schema change from degrees to kilometers][4];

  [4]: apache/lucene-solr@8fd247c#diff-097da721a526b8f1f57d503942262d68

* The source code computes the [default number of degrees][5]
  converting 0.001 km (i.e. 1 m) to degrees assuming a [spherical
  Earth][6] model of radius [6371.0087714 km (Earth mean
  radius)][7].

  * The computation relies on [`spatial4j`][8] [0.4.1][9]
    `DistanceUtils.dist2Degrees` function. (I did not verify that
    `0.000009` is the result of that expression.)

  [5]: https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.7.0/lucene/spatial/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java#L86
  [6]: https://github.com/locationtech/spatial4j/blob/spatial4j-0.4.1/src/main/java/com/spatial4j/core/distance/DistanceUtils.java#L480
  [7]: https://github.com/locationtech/spatial4j/blob/spatial4j-0.4.1/src/main/java/com/spatial4j/core/distance/DistanceUtils.java#L60
  [8]: https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.7.0/solr/core/ivy.xml#L37
  [9]: https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.7.0/lucene/ivy-versions.properties#L40
Luca Favatella committed Dec 5, 2016
commit 5f21d38df63e066684b39ed9f83f6bde6c37ce42
12 changes: 12 additions & 0 deletions priv/default_schema.xml
Original file line number Diff line number Diff line change
@@ -82,6 +82,7 @@
<dynamicField name="*_dts" type="date" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" multiValued="false"/>
<dynamicField name="*_p" type="location" indexed="true" stored="true" multiValued="false"/>
<dynamicField name="*_srpt" type="location_rpt" indexed="true" stored="true" multiValued="false"/>

<!-- some trie-coded dynamic fields for faster range queries -->
<dynamicField name="*_ti" type="tint" indexed="true" stored="true" multiValued="false"/>
@@ -407,6 +408,17 @@
-->
<fieldtype name="geohash" class="solr.GeoHashField"/>

<!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
For more information about this and other Spatial fields new to Solr 4, see:
http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
-->
<!-- `maxDistErr` of one meter (0.001 kilometers) is just a bit less than 0.000009 degrees.
For more information about this, see:
https://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-4.7.pdf
-->
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />

<!-- some examples for different languages (generally ordered by ISO code) -->

<!-- Arabic -->