2013-02-26 335 views
1

我已經實現了空間搜索和需要生成Solr中的範圍距離的面或「水桶」一個方面查詢:以下鏈接幫助我在這裏 - http://wiki.apache.org/solr/SpatialSearch#How_to_facet_by_distanceSolrnet等效FRANGE在距離

我找到了解決辦法以下問題 Faceting on distance in solr- how to generate links that search withing a given range of distance有幫助。

我正在使用Solrnet從基於.NET的網站生成Solr查詢。我無法找到一個鏈接,可以幫助我生成如下所示的查詢的範圍部分(,斜體爲)。請幫助我指出使用solrnet生成此代碼的代碼。

& Q = &元數=商店& PT = 45.15,-93.85 ** & facet.query = {!FRANGE L = 0 U = 5} geodist()& facet.query = {FRANGE升! = 5.001 u = 3000} geodist()**。

回答

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; 

此外,您可能能夠使用SolrFacetQueryLocalParams聯合打造的小查詢。檢查以下鏈接的一些例子:

更新: 正如評論指出,使用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; 
+0

感謝您的回覆,Paige。由於ExtraParams和LocalParams是字典對象,我無法傳遞facet.query兩次。我早些時候嘗試過:。我也試過SolrQueryByRange,它生成的範圍是1到5,它不能和Solr一起工作。任何進一步的指針請問 – user2112526 2013-02-27 08:00:11

+0

這些facet.query參數是否一直都是一樣的?能夠在默認值部分的Solr端請求處理程序中正確指定它們這是解決重複facet.query問題的一種解決方法 – 2013-02-27 14:18:47

+0

我剛剛在本地製作了一個示例,並更新了我的答案,這似乎是發送了正確的請求Solr。 – 2013-02-27 14:28:18