2011-07-27 22 views
0

我是Solr的新手。使用以下Solrnet查詢來運行我的搜索。使用SolrNet進行空間搜索和多列

results = solr.Query(new LocalParams { { "type", "dismax" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions); 

上述查詢沒有任何問題。我在同一個查詢中使用以下內容嘗試空間搜索。

results = solr.Query(new LocalParams { { "type", "dismax" },{ "pt", "40.7143528,-74.0059731" },{ "sfield", "coords" },{ "d", "15" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions); 

上面的查詢並不考慮空間搜索到賬戶,而是返回所有文檔的結果。

如果將「類型」更改爲「geofilt」,相同的查詢將執行空間搜索。

results = solr.Query(new LocalParams { { "type", "geofilt" },{ "pt", "40.7143528,-74.0059731" },{ "sfield", "coords" },{ "d", "15" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions); 

但是這一次,它不返回相關結果。即如果用戶搜索「豐田」,上面的查詢type = geofilt可能會返回15公里內的「福特」。

你能指導我走向正確的方向嗎?

+0

請正確格式的代碼片斷。 –

回答

0

這裏有兩個子句:關鍵字的dismax查詢和地理空間查詢,但是您試圖將兩者都塞進單個子句中。相反,將它們表示爲單獨的查詢子句(單獨的查詢對象)。

僞代碼:

var spatial = new LocalParams {{"type","geofilt"},...} + new SolrQuery(""); 
queryOptions.FilterQueries = new[] {spatial}; 
var keyword = new LocalParams { { "type", "dismax" }, { "qf", "Title Description" } } + new SolrQuery(Keywords); 
var results = solr.Query(keyword, queryoptions); 
+0

謝謝。這是否意味着我將不得不使用Solrnet運行嵌套查詢?我對這個東西真的很陌生,是否有可能得到幾行僞代碼(對於Solrnet),以便我能夠理解並做更多的研究。 –

+0

@Peter Joel:done –

+0

這導致編譯時error.i.e。運算符'&&'不能應用於類型'SolrNet.ISolrQuery'和'SolrNet.ISolrQuery'的操作數 'var spatial = new LocalParams {{「type」,「geofilt」},{「pt」,「40.7143528, - 74.0059731「},{」sfield「,」coords「},{」d「,」15「}} +新的SolrQuery(」「); var keywords = new LocalParams {{「type」,「dismax」},{「qf」,「Title Description」}} + new SolrQuery(SearchKeywords); var results = solr.Query(spatial && keywords,queryoptions); ' –