OK. But I am concerned that you are trying to bite off more than can
be done easily. The sample call is:

http://localhost:8983/solr/select?q=*:*&fq={!geofilt}&sfieldmulti=storemv&pt=43.17614,-90.57341&d=100&sfield=store&sort=geomultidist%28%29%20asc&sfieldmultidir=asc

Notice that geomultidist() needs another field called storemv right
now that is bar delimited. I tried to pull out the lat,long from
geohash, but Dave stores the geohash values in Ngram for the purpose
of filtering (I believe).

 Here are the issues as I see them:

1. ValueSources does not support MultiValue fields. The PointType.java
would be extended or solr.GeoHashField would be extended to support
this. The way the spatial stuff works is that the Lat, Long is created
as separate fields and then the fc can get the matches values from the
cache. I think this is totally sub-optimal. There should be a generic
ValueSource that works on MultiValue fields directly and generically.
It would be extremely useful if this all happened behind the scenes:

<field name="store_lat_lon" type="geohash" indexed="true"
stored="true" multiValues="true" />

My code is dependent on the following to do distance quickly (using
ValueSource):
<arr name="storemv">
<str> 39.90923,-86.19389|42.37577,-72.50858</str>
</arr>

storing: 39.90923,-86.19389 and 42.37577,-72.50858

Internally it could be stored as (and converted using the type):

store_lat_long_num=2
store_lat_long_lat_1 = 39.90923
store_lat_long_lon_1 = -86.19389
store_lat_long_lon_2 = 42.37577
store_lat_long_lon_2 = -72.50858

2. Using ValueSource with one value is fast, and splitting it this way
might be a lot slower to calculate distances. It is convenient, but
could be slow. It might be better to just have solr.GeoHashField
append to the interanal field so that it can use ValueSource directly.

Use an internal field that uses bars internally:

store_lat_long_bar =  39.90923,-86.19389|42.37577,-72.50858

For each lat,long value
    - Calculate geohash and Ngram store
    - Append to the internal field "store_lat_long_bar" based on the field name

Option 2 is easier and makes it supportable now without waiting for
redesign of ValueSource.



On Thu, Mar 10, 2011 at 2:16 PM, Smiley, David W. <dsmi...@mitre.org> wrote:
> I'm looking for validation of my approach to geospatial sorting from 
> committers.
>
> I'm starting work on implementing sorting for my geohash based filter code in 
> https://issues.apache.org/jira/browse/SOLR-2155  The existing 
> GeohashHaversineFunction uses ValueSources based on the the natural string 
> value in the index, StrFieldSource, and it decodes them each pass through.  
> This is obviously sub-optimal.  So I think a remedy is to implement my own 
> ValueSource extending MultiValueSource that will decode the geohash into a 
> pair of doubles on initialization.  It would do this using a 
> CachedArrayCreator implementation of my design.  I don't think I can/should 
> use VectorValueSource since that one is predicated on being composed of 
> multiple other value sources which is not my scenario.  Unfortunately my 
> proposed ValueSource subclass cannot simultaneously subclass both 
> MultiValueSource and FieldCacheSource but the latter doesn't appear to really 
> be necessary.  Actually I'm surprised MultiValueSource isn't an interface 
> since it only has an abstract method.
>
> Another aspect to this problem is that geohashes support multiple points per 
> document.  I intend to subclass DocValues() with a method that will return an 
> array of simple objects holding the pair.  If someone has hints as to some 
> issues/problems with this approach then please let me know.
>
> Bill Bell, if you're reading this, I know you did a patch attached to 
> SOLR-2155 for sorting but it uses separate fields to hold the lat & lon for 
> sorting and I'm trying to fix this.
>
> ~ David Smiley
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: dev-h...@lucene.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to