如何以JSON格式获取所有SolrNet查询结果信息?

时间:2012-03-23 18:41:21

标签: json.net solrnet

我不确定这是否是JSON.Net问题或SolrNet问题,这就是我用两者标记它的原因。

我正在使用SolrNet,目前通过返回solr.Query()返回的对象的JsonNetResult编码来处理来自MVC调用的JavaScript的所有页面交互。我现在正在尝试使用Faceting,但我没有在结果中看到Facet信息。

我有一个类似下面的MVC控制器方法。 (JsonNetResult类似于股票JsonResult,但使用JSON.Net编码JSON,described here。)

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 个答案:

答案 0 :(得分:2)

由于Solr可以使用JSON进行响应,如果要将JSON直接返回到视图,则需要通过让SolrNet反序列化XML响应来产生一些不必要的开销,然后将其序列化为JSON。相反,使用SolrNet的组件跳过响应解析器。有几个指针要做:

答案 1 :(得分:0)

我不确定这是否是最好的答案,但我一直在尝试并发现如果我改变原来的行:

jsonNetResult.Data = documents;

为:

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

数据至少由JSON.Net序列化。我想我仍然不理解SolrNet的Query()方法返回的对象的格式,因为似乎应该序列化那些属性(如FacetFields)而不必像我现在在上面那样明确地命名它们?