2012-03-23 32 views
1

我不確定這是一個JSON.Net問題還是一個SolrNet問題,這就是爲什麼我用兩者來標記它。如何獲取JSON格式的所有SolrNet查詢結果信息?

我使用SolrNet,目前處理JavaScript的所有頁面的交互性從MVC調用,通過返回()由solr.Query返回的對象的JsonNetResult編碼。我現在正在試驗Faceting,但在結果中沒有看到Facet信息。

我有一個如下所示的MVC控制器方法。 (JsonNetResult類似於股票JsonResult,但使用JSON.Net,described here JSON編碼。)

public JsonNetResult Index(string keywords) 
{ 
    JsonNetResult jsonNetResult = new JsonNetResult(); 

    var documents = solr.Query(new SolrQuery(keywords), new QueryOptions 
    { 
     Rows = 10, 
     Facet = new FacetParameters 
     { 
      Queries = new[] {new SolrFacetFieldQuery("system")} 
     } 
    }); 
    jsonNetResult.Formatting = Formatting.Indented; 
    jsonNetResult.Data = documents; 
    return jsonNetResult; 
} 

我期待看到JsonNetResult編碼成JSON的刻面的信息,但它包含所有是陣列與我的查詢匹配的文檔的哈希值。我是否錯過了SolrNet響應對象的工作方式,還是我真的需要自己解析對象,並創建一些JSON.Net可以用來編碼與查詢相關的所有信息的東西?

僅供參考,我曾嘗試在MVC中使用標準的JsonResult,結果是一樣的。另外,我使用SolrNet的原因並不是直接調用Solr並詢問JSON,因爲我們不想直接向用戶公開Solr搜索引擎Web界面。

回答

2

由於Solr可以使用JSON進行響應,如果您想直接返回JSON到視圖,那麼SolrNet會反序列化XML響應,然後將其序列化爲JSON,從而產生一些不必要的開銷。相反,使用SolrNet的組件來跳過響應解析器。一對夫婦的指針要做到這一點:

+0

謝謝,花更多的時間在這之後,我想你是對的! – 2012-03-24 16:13:33

0

我不知道這是否是最好的答案,但我因爲一直在試驗,結果發現,如果我在我的原線改由:

jsonNetResult.Data = documents; 

到:

jsonNetResult.Data = new { Documents = documents, FacetFields = documents.FacetFields }; 

數據至少是由JSON.Net序列化的。我想我仍然不明白SolrNet的Query()方法返回的對象的格式,因爲它似乎應該序列化那些屬性(如FacetFields),而不必像我現在正在做的那樣明確地命名它們?