【问题标题】:How to get all SolrNet query result info in JSON format?如何获取 JSON 格式的所有 SolrNet 查询结果信息?
【发布时间】:2012-03-23 18:41:21
【问题描述】:

我不确定这是 JSON.Net 问题还是 SolrNet 问题,这就是为什么我同时标记它的原因。

我正在使用 SolrNet,目前通过返回 solr.Query() 返回的对象的 JsonNetResult 编码来处理来自 MVC 调用的所有页面交互。我现在正在尝试使用 Facet,但在我的结果中没有看到 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 界面直接暴露给用户。

【问题讨论】:

    标签: json.net solrnet


    【解决方案1】:

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

    【讨论】:

    • 谢谢,花了更多时间在这上面,我认为你是对的!
    【解决方案2】:

    我不确定这是否是最佳答案,但我一直在试验,发现如果我将原来的行从:

    jsonNetResult.Data = documents;
    

    到:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 2012-04-19
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多