【问题标题】:The remote server returned an error: (400) Bad Request. when add docs to index远程服务器返回错误:(400) 错误请求。将文档添加到索引时
【发布时间】:2011-01-06 06:28:57
【问题描述】:

当我将文档添加到索引时,页面返回 400 错误请求。并且solr已经启动,可以从数据库中获取数据。所以我需要将数据放入索引中。但是,总是失败。


1) 这里是 SolrBaseRepository 的代码 sn-p

/// <summary>    
/// Base repository for Solr    
/// </summary>  
public class SolrBaseRepository  
{    
    /// <summary>    
    /// New instance of Solr    
    /// </summary>    
    /// <typeparam name="T">Specific type</typeparam>  
    public class Instance<T>    
    {    
        /// <summary>  
        /// Start Solr instance for a specific type  
        /// </summary>  
        public void Start()  
        {  
            var instances = Startup.Container.GetAllInstances(typeof (ISolrOperations<T>));  

            if (instances.Count() == 0)  
            {  
                Startup.Init<T>(Toolbox.SolrUrl);  
            }  
        }  

    }  
}  

2) 这里是 schemal.xml 的主要部分

<fields>    
    <field name="id" type="int" indexed="true" stored="true" required="true" />   
    <field name="firstname" type="text" indexed="true" stored="false"required="false" />   
    <field name="lastname" type="text" indexed="true" stored="false" required="false" />  
    <field name="position" type="text" indexed="true" stored="false" required="false" />  
    <field name="text" type="text" indexed="true" stored="false" multiValued="true" />  
</fields>  
<copyField source="firstname" dest="text" />    
<copyField source="lastname" dest="text" />    
<copyField source="position" dest="text" />    
<uniqueKey>id</uniqueKey>    
<defaultSearchField>text</defaultSearchField>    
<solrQueryParser defaultOperator="AND" />     

3) solrurl:http://localhost:8080/solr

<appSettings>  
<add key="SolrUrl" value="http://localhost:8080/solr"/>  
</appSettings>  

4) 错误在这里:

/// <summary>  
/// Add all players to the index  
/// </summary>  
public void IndexPlayers()  
{  
    new SolrBaseRepository.Instance<Player>().Start();  

    var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Player>>();  
    var players = new PlayerRepository().GetPlayers();  

    **solr.Add(players);** // The remote server returned an error: (400) Bad Request.   
    solr.Commit();  
}  

【问题讨论】:

  • 新 SolrBaseRepository.Instance().Start(); var solr = ServiceLocator.Current.GetInstance>(); var specificPlayer = new PlayerRepository().GetPlayer(player.FirstName, player.LastName, player.Position); solr.Add(specificPlayer); solr.Commit();
  • 请在问题中发布代码,格式正确。同时发布 SolrBaseRepository 的定义。
  • 同时发布 Player 的定义和你的 schema.xml。

标签: solrnet


【解决方案1】:

solr 日志将为您提供所需的信息,或者如果您从控制台打开,控制台应该会抛出异常。

【讨论】:

    【解决方案2】:

    查看 Tomcat 日志文件,它包含详细的 Solr 异常。在我的机器上,它位于

    C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs

    您会找到一个以 catalina..log 格式命名的文件。 (例如 catalina.2011-05-26.log)

    【讨论】:

      【解决方案3】:

      您可以这样做:

      • 注释 solrconfig.xml 中的所有 /dataimport 块
      • 确保 ProtocolVersion 为 HttpVersion.Version10(SolrNet.Impl.SolrConnection 中的 Post 方法)。如果没有,请下载 SolrNet 源代码并根据您的偏好重新编译。

      【讨论】:

      • 您是否遇到过任何促使您切换到 HttpVersion.Version10 的问题?我想听听。
      • 我读到切换到 HttpVersion.Version10 会有所帮助。我认为对我有帮助的是检查 solrconfig.xml 的格式是否正确。
      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      相关资源
      最近更新 更多