2016-05-18 3 views
0

Ich habe 2 verschiedene Felder in der schema.xml Datei des solr v6.0.0 erstelltsolr immer erforderlich Feldfehler fehlen, wenn Daten eingefügt

<field name="company_id" type="anand_custom_definition" indexed="false" stored="true" required="true" multiValued="false" /> 
<field name="project_name" type="anand_custom_definition" indexed="true" stored="true" required="true" multiValued="false" /> 

, wenn ich Daten versuche zum solr hinzuzufügen solrj verwenden, ich erhalte fehlt Pflichtfeld: company_id

mein Code, um die Daten für das Einfügen

public class JDBC { 
private static final String DB_URL = "jdbc:mysql://192.168.0.237:3306/anandDatabase?autoReconnect=true"; 
private static final String USER_NAME = "anand"; 
private static final String PASSWORD = "anand"; 
private static final String SOLR_URL = "http://192.168.0.237:8983/solr/anandSampleCollection"; 
private static SolrClient solrClient; 

private static final Logger lOGGER = Logger.getLogger(JDBC.class); 

public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 

    try { 
     Class.forName(MYSQL_DRIVER); 
     conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); 
     stmt = conn.createStatement(); 
     String query = "SELECT id,public_id,name,description,code,company_id FROM project p"; 
     ResultSet rs = stmt.executeQuery(query); 
     ResultSetMetaData resultSetMetaData = rs.getMetaData(); 
     int numColumns = resultSetMetaData.getColumnCount(); 
     String[] colNames = new String[numColumns + 1]; 
     int[] colNo = new int[numColumns + 1]; 

     for (int i = 1; i < (numColumns + 1); i++) { 
      if (resultSetMetaData.getColumnName(i) != "null") { 
       colNames[i] = resultSetMetaData.getColumnName(i); 
      } 
     } 
     Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); 
     solrClient = new HttpSolrClient(SOLR_URL.trim());    
     System.out.println(solrClient.ping());             
     while (rs.next()) {     
      SolrInputDocument doc = new SolrInputDocument(); 
      doc.addField("project_company_id", rs.getInt("company_id")); 
      solrClient.add(doc);     
      docs.add(doc); 
      doc = null; 
     } 
     UpdateResponse updateResponse = solrClient.commit(); 
     System.out.println(updateResponse.getStatus()); 
     rs.close(); 
     stmt.close(); 
     conn.close(); 
    } catch (Exception ex) { 
     System.out.println("Error OCcurred"+ex.getMessage()); 
     ex.printStackTrace(); 
    } 
} 

ist}

die Stacktrace Ausnahme ist

{responseHeader={zkConnected=null,status=0,QTime=68,params={q={!lucene}*:*,distrib=false,df=_text_,echoParams=all,rows=10,wt=javabin,version=2}},status=OK} 
public id--809ACB41-1C22-3932-6584-1CD2CD649063 
org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://192.168.0.237:8983/solr/anandSampleCollection: [doc=3d586476-b5d0-4136-83f4-acf8145dfa99] missing required field: company_id 
Error OCcurredError from server at http://192.168.0.237:8983/solr/anandSampleCollection: [doc=3d586476-b5d0-4136-83f4-acf8145dfa99] missing required field: company_id 
    at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:575) 
    at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:241) 
    at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:230) 
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:150) 
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:174) 
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:139) 
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:153) 
    at com.am.solr.jdbc.JDBC.main(JDBC.java:84) 

kann mir jemand mitteilen, wenn ich versuche, den project_name Wert einzufügen, warum ich company_id erforderlich Fehler

+0

ist die company_id als eindeutiges Feld in schema.xml hinzugefügt? –

+0

versuchen, die Anweisung doc = null zu entfernen ... –

+0

@AbhijitBashetti hat versucht, Null zu entfernen, es wirkt sich nicht auf –

Antwort

0

Nun bin immer, wird der Fehler, verursacht durch Es gibt keinen Wert für das Feld company_id. Mit Blick auf den Code, fügen Sie nie einen Wert für das company_id Feld:

doc.addField("project_company_id", rs.getInt("company_id")); 

project_company_id als company_id nicht gleich ist.

+0

Nun, das ist, was ich versuche zu tun, company_id ist ein separates Feld, für das ich Indizierung benötigt und project_company_id ist ein anderes Feld. Wenn ich eine der Informationen in der Datenbank bearbeite oder hinzufüge, möchte ich, dass diese Felder erstellt werden, wo company_id und project_company_id unterschiedlich sind und nicht voneinander abhängen. Kann ich nicht stored = "true" für verschiedene Felder hinzufügen, die nicht voneinander abhängig sind? –

+0

Sie können - mein Kommentar war, dass Sie _not_ hinzufügen kein 'company_id' Wert für das Dokument. Sie fügen nur einen Wert für das Feld "project_company_id" hinzu. – MatsLindh

Verwandte Themen