C# SolrNET-根级别的数据无效。第1行,位置1

C# SolrNET-根级别的数据无效。第1行,位置1,c#,solr,solrnet,C#,Solr,Solrnet,我正在使用:7.0.1 on:localhost:8983/solr/global 我将0.8.1与以下代码示例一起使用: using SolrNet; using Microsoft.Practices.ServiceLocation; Startup.Init<SOLRModel>("http://localhost:8983/solr/global"); var solr = ServiceLocator.Current.GetInstance<ISolrOperati

我正在使用:7.0.1 on:localhost:8983/solr/global

我将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.
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);
我使用的是默认模式,也尝试过techproducts示例,得到了相同的错误

我可以导航到::并得到正常的JSON响应

使用
&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>

- 
- 
0
0
- 
*:* 
xml

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

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

SolrNet说:

不管你给它什么,它都会直接传递给Solr的q参数

不应将
&wt=xml
传递给
q
参数,SolrNet需要将其作为单独的参数进行处理。这适用于您想要设置的任何其他参数,如开始、排序等

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

一个完整的例子:

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.
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);
使用SolrNet;
使用Microsoft.Practices.ServiceLocation;
Startup.Init(“http://localhost:8983/solr/global");
var solr=ServiceLocator.Current.GetInstance();
var options=新查询选项();
options.ExtraParams=新的KeyValuePair[]{
新的KeyValuePair(“wt”、“xml”)
};
var results=solr.Query(新的SolrQuery(“*:*”),选项);

您确定SolrNET支持XML输出吗?听起来可能需要JSON输出?是的,XDocument、XElement等等。参见:作为示例。无论我是否使用'&wt=xml',都会出现错误。您在Solr日志中得到了有用的信息吗?您可能是指作为查询的
*:*
,而不是
*
。我不确定你是否应该在你的URL中包含
global
——根据SolrNet文档,它似乎是由型号/型号名称提供的?这将产生一个404,当试图将返回的404 HTML解析为XML时,这将导致解析错误。global是核心名称,random name,我以前有过techproducts,给出了相同的错误。没有核心名称,我找不到404。日志是在我出错时记录的错误,但只有在我出错的情况下,才与查询无关。我也遇到过同样的问题。日志显示它存在以下问题:添加字段“end”时出错=“2017-08-05”John,这一点我在问题中已经讨论过好几次了。这不是我问题的答案。