【问题标题】:SolrNET - Data at the root level is invalid. Line 1, position 1SolrNET - 根级别的数据无效。第 1 行,位置 1
【发布时间】:2018-03-30 21:56:24
【问题描述】:

我在:localhost:8983/solr/global 上使用Solar: 7.0.1

我正在使用SolrNET 0.8.1 和以下代码示例:

using SolrNet;
using Microsoft.Practices.ServiceLocation;

Startup.Init<SOLRModel>("http://localhost:8983/solr/global");
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SOLRModel>>();
var results = solr.Query(new SolrQuery("*:*&wt=xml")); // Throws Error Here.

我收到一个错误:

Data at the root level is invalid. Line 1, position 1.

我使用的是默认架构,也尝试过 techproducts 示例,得到相同的错误。

我可以导航到:http://localhost:8983/solr/global/select?q=:,我得到了正常的 JSON 响应。

使用&amp;wt=xml 可以为我提供格式良好的 XML 响应:

<?xml version="1.0" encoding="UTF-8" ?> 
- <response>
    - <lst name="responseHeader">
           <int name="status">0</int> 
          <int name="QTime">0</int> 
    - <lst name="params">
        <str name="q">*:*</str> 
        <str name="wt">xml</str> 
    </lst>
    </lst>
<result name="response" numFound="0" start="0" /> 
</response>

请有人告诉我在哪里可以解决这个错误。

【问题讨论】:

  • 你确定 SolrNET 支持 XML 输出吗?听起来它可能期望 JSON 输出?
  • 是的,XDocument、XElement 等等。请参阅:github.com/SolrNet/SolrNet/blob/master/SolrNet/Impl/… 作为示例。天气我是否使用'&wt=xml',错误存在。
  • 你在 Solr 日志中得到了什么有用的信息吗?您可能指的是*:* 作为查询,而不是*.*。我不确定您是否应该在您的 URL 中包含 global - 根据 SolrNet 文档,它似乎是由模型/模型名称提供的?这将给出 404,当尝试将返回的 404 HTML 解析为 XML 时会导致解析错误。
  • global 是核心名称,随机名称,我之前有techproducts,给出同样的错误。没有核心名称,我得到 404 not found。日志记录了我所做的错误,但不会针对查询,除非我犯了错误。
  • 我也遇到了同样的问题。日志显示它存在以下问题:Error added field 'end'='2017-08-05'

标签: c# solr solrnet


【解决方案1】:

我发现默认情况下 solrnet 返回 json。为了解决这个问题,我在将“wt”设置为 xml 的查询中为 queryoptions 传递了额外参数。有关设置额外参数,请参阅文档。

【讨论】:

  • 约翰,我已经在我的问题中多次讨论过这个问题。这不是我问题的答案。
【解决方案2】:

SolrNet doc page 这么说:

你给它的任何东西都会直接传递给 Solr 的 q 参数

&amp;wt=xml 不应传递给q 参数,SolrNet 需要将其完全视为一个单独的参数。这适用于您要设置的任何其他参数,例如开始、排序等。

正确的方法是使用重载solr.Query(ISolrQuery query, QueryOptions options),并通过ExtraParams属性传递这些参数。

一个完整的例子:

using SolrNet;
using Microsoft.Practices.ServiceLocation;

Startup.Init<SOLRModel>("http://localhost:8983/solr/global");
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SOLRModel>>();

var options = new QueryOptions();

options.ExtraParams = new KeyValuePair<string,string>[] {
    new KeyValuePair<string,string>("wt", "xml")
};

var results = solr.Query(new SolrQuery("*:*"), options);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2020-12-19
    • 2011-10-28
    相关资源
    最近更新 更多