Search code examples
solrspatialsolrnetspatial-query

Solrnet equivalent for frange in a facet query for Distance


I have implemented Spatial Search and need to generate facets for ranges or 'buckets' of distance in Solr: the following link helped me here - http://wiki.apache.org/solr/SpatialSearch#How_to_facet_by_distance

I found the solution to the following question Faceting on distance in solr- how to generate links that search withing a given range of distance helpful.

I am using Solrnet to generate Solr queries from my .NET based site. I cant find a link that would help me to generate a frange part (italicized) of the query as below. Please help in pointing me to the code to generate this using solrnet.

&q=:&sfield=store&pt=45.15,-93.85**&facet.query={!frange l=0 u=5}geodist()&facet.query={!frange l=5.001 u=3000}geodist()**.


Solution

  • I am assuming that you are already using ExtraParams to set the sField & pt parameters. You should be able to add the facet.query parameters to this as well.

    var results = solr.Query(SolrQuery.All, new QueryOptions
    {
        ExtraParams = new Dictionary<string, string> {
                    { "sfield", "store" } , 
                    { "pt", "45.15,-93.85" }
                    { "facet.query", "{!frange l=0 u=5}geodist()" } ,
                    { "facet.query", "{!frange l=5.001 u=3000}geodist()" } ,
                }
     });
    
    return results;
    

    Additionally, you might be able to use SolrFacetQuery combined with LocalParams to build the facet queries. Check the following links for some examples:

    Update: As stated in the comments, the use of the ExtraParams does not work because it is a dictionary object and as a result does not allow for multiple facet.query parameters. However, I was able to use the Facet Queries as described in the SolrNet Facet Wiki page linked above to create the following:

    var facet1 = new SolrFacetQuery(new SolrQuery("{!frange l=0 u=5}geodist()}"));
    var facet2 = new SolrFacetQuery(new SolrQuery("{!frange l=5.001 u=3000}geodist()}"));
    var results = solr.Query(SolrQuery.All, new QueryOptions
        {
            ExtraParams = new Dictionary<string, string>
                {
                    {"sfield", "store"},
                    {"pt", "45.15,-93.85"}
                },
            Facet = new FacetParameters
                {
                    Queries = new[]
                        {
                            facet1, facet2
                        }
                }
        });
    return results;