2010-05-07 63 views
5

我在使用jetty的Windows計算機上運行Solr。我已經下載了Spatial Solr Plugin,我終於成功運行了。我也使用Solrnet從我的asp.net mvc項目查詢Solr。如何將Spatial Solr添加到Solrnet查詢

現在,將數據添加到我的索引似乎工作正常,SpatialTierUpdateProcessorFactory也工作。

的問題是:

如何將空間查詢添加到使用Solrnet庫我的正常查詢。我曾嘗試使用「ExtraParams」參數添加它,但是這並沒有很好地發揮作用。

這裏是我試圖將空間查詢與數據範圍查詢相結合的一個示例。日期範圍查詢工作正常不附加給它的空間查詢:

new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery); 

導致對Solr的以下查詢:

(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z]) 

和錯誤消息我得到的回覆是:

遠程服務器返回錯誤:(400)錯誤的請求。

SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars 
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit= 
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0 
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2 
4. 
Was expecting: 
    "}" ... 

現在,問題是如果我使用Solr Web Admin頁面並對它執行以下查詢,一切正常。

{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London 

什麼是調用使用SolrNet空間功能的最好/正確的方法。以某種方式將查詢手動添加到查詢字符串中的最佳方法是如何?

回答

5

使用LocalParams類來表示LocalParams in Solr

solr.Query(new LocalParams { 
    {"type", "spatial"}, 
    {"lat", "-51.5224"}, 
    {"long", "-2.6257"}, 
    {"radius", "10000"}, 
    {"unit", "km"}, 
    {"calc", "arc"}, 
    {"threadCount", "2"}, 
} + Query.Field("text").Is("London")); 

這是作爲SolrNet 0.3.0b1的。

+0

乾杯!正是我需要的。我通過手動調整查詢字符串來解決問題,但是您的解決方案是更好/更乾淨的方法。非常感謝! – Flo 2010-05-08 17:34:54