我不确定这是否是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界面直接暴露给用户。
答案 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)而不必像我现在在上面那样明确地命名它们?