2011-01-06 10 views
6

po dodaniu dokumentów do indeksu strona zwraca 400 złych żądań. Solr został uruchomiony i może pobierać dane z bazy danych. Więc potrzebuję umieścić dane w indeksie. Jednak zawsze zawodziło.Serwer zdalny zwrócił błąd: (400) Złe żądanie. po dodaniu dokumentów do indeksu


1) tutaj jest to kod fragment SolrBaseRepository

/// <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) tutaj jest głównym elementem 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) Błąd jest tutaj:

/// <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(); 
} 
+0

nowa SolrBaseRepository.Instance () .Start(); var solr = ServiceLocator.Current.GetInstance >(); var specificPlayer = new PlayerRepository(). GetPlayer (player.FirstName, player.LastName, player.Position); solr.Add (specificPlayer); solr.Commit(); – Benny

+0

proszę zaksięgować kod w pytaniu, poprawnie sformatowany. Opublikuj także definicję SolrBaseRepository. –

+0

również umieść definicję odtwarzacza i pliku schema.xml. –

Odpowiedz

5

Dziennik solr poda informacje, których potrzebujesz, lub jeśli otworzyłeś z konsoli powinien być rzut wyjątku do konsoli.

+2

Zrobiłeś dla ciebie 1000 punktów! – dotancohen

1

Oto co można zrobić:

  • Komentarz wszystkie/dataimport bloki w solrconfig.xml
  • Upewnij ProtocolVersion jest HttpVersion.Version10 (metoda post w SolrNet.Impl.SolrConnection). Jeśli nie, pobierz źródło SolrNet i przeprowadź kompilację zgodnie z własnymi preferencjami.
+0

Czy wystąpił jakiś problem, który zmotywował Cię do przejścia na HttpVersion.Version10? Chciałbym o tym usłyszeć. –

+1

Czytałem, że przejście na HttpVersion.Version10 mogłoby pomóc. Myślę, że pomogło mi to sprawdzić, czy plik solrconfig.xml był dobrze sformułowany. –

3

Przejrzyj plik dziennika Tomcat, zawierający szczegółowy wyjątek Solr. Na moim komputerze jest położony w

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

znajdziesz plik o nazwie w catalina..log formatu. (np. catalina.2011-05-26.log)