Solrnet等效于距离的方面查询中的frange

时间:2013-02-26 19:00:59

标签: solr spatial solrnet spatial-query

我已经实施了空间搜索,需要在Solr中为范围或“距离”桶生成方面:以下链接帮助了我 - http://wiki.apache.org/solr/SpatialSearch#How_to_facet_by_distance

我找到了以下问题的解决方案 Faceting on distance in solr- how to generate links that search withing a given range of distance有帮助。

我正在使用Solrnet从我的基于.NET的站点生成Solr查询。我找不到一个链接,可以帮助我生成查询的frange部分(斜体),如下所示。请帮助我指出使用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()**。

1 个答案:

答案 0 :(得分:3)

我假设您已经在使用ExtraParams来设置sField& pt参数。您也应该能够将facet.query参数添加到此。

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;

此外,您可以使用SolrFacetQuery结合LocalParams来构建构面查询。请查看以下链接以获取一些示例:

<强>更新 正如评论中所述,使用ExtraParams不起作用,因为它是一个字典对象,因此不允许多个facet.query参数。但是,我能够使用上面链接的SolrNet Facet Wiki页面中描述的Facet Queries来创建以下内容:

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;