2016-03-23 8 views
0
package lucene; 

import java.io.File; 
import java.nio.file.FileSystems; 
import java.nio.file.Path; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import org.apache.lucene.analysis.core.SimpleAnalyzer; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.document.DateTools; 
import org.apache.lucene.document.DateTools.Resolution; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.document.StringField; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.index.IndexWriterConfig; 
import org.apache.lucene.store.FSDirectory; 
import org.apache.lucene.util.Version; 
public class Lucenetest { 
//database connection 
public static final String PATH = "C:/dbindex/index.txt"; 
private static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
private static final String CONNECTION_URL = "jdbc:sqlserver://WMDENTW1\\SQLEXPRESS:1433;" + 
        "database=FullTextDB;" + 
        "user=root;" + 
        "password=root123"; 
private static final String QUERY = "select FTID, ID, CLASSID, TEXT, PUBNOTICECONTENT, DOCUMENTCONTENT, contentSum_DE from METADATA_FULLTEXT"; 
public static void main(String[] args) throws Exception { 
Lucenetest indexer = new Lucenetest(); 

//error here 

***Directory indexDir = FSDirectory.open(new File(PATH).toPath());*** 

try { 
// Index Writer 
    Class . forName (JDBC_DRIVER). newInstance(); 

    Connection conn = DriverManager.getConnection(CONNECTION_URL); 

    StandardAnalyzer analyzer = new StandardAnalyzer(); 

    IndexWriterConfig config = new IndexWriterConfig (analyzer); 

    IndexWriter index writer = new IndexWriter (indexDir , config); 

    System.out.println("Indexing to directory '" + indexDir + "'..."); 

    int indexedDocumentCount = indexer.indexDocs1(indexWriter, conn); 

    index writer . close(); 

    System.out.println(indexedDocumentCount + " records have been indexed successfully"); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

@SuppressWarnings("deprecation") 
int indexDocs1(IndexWriter writer, Connection conn) throws Exception { 
    String sql = QUERY; 
    Statement stmt = conn.createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 
    int i=0; 
    while (rs.next()) { 
    Document d = new Document(); 
d.add(new StringField("FTID", rs.getString("FTID"), StringField.Store.YES)); 
d.add(new StringField("ID", rs.getString("ID"), StringField.Store.YES)); 
d.add(new StringField("CLASSID", rs.getString("CLASSID"), StringField.Store.YES)); 
d.add(new StringField("TEXT", rs.getString("TEXT"), StringField.Store.YES)); 
d.add(new StringField("PUBNOTICECONTENT", rs.getString("PUBNOTICECONTENT"), StringField.Store.YES)); 
d.add(new StringField("DOCUMENTCONTENT", rs.getString("DOCUMENTCONTENT"), StringField.Store.YES)); 
d.add(new StringField("contentSum_DE", rs.getString("contentSum_DE"), StringField.Store.YES)); 

    writer.addDocument(d); 
    i++; 
} 
    return i; 
} 


    private static void indexDocs(IndexWriter writer, Connection conn) { 
     // TODO Auto-generated method stub 

    } 
} 

Ich erhalte eine Ausnahme, Indizierung Verzeichnis:lucene errror: Indizierung in das Verzeichnis 'C:/index' ... Hinzufügen 1234 java.lang.IllegalArgumentException: Wert nicht null 1002 insgesamt Millisekunden sein kann

MMapDirectory @ C: \ dbindex [email protected]' ...
java.lang.IllegalArgumentException: Wert nicht
org.apache.lucene.document.Field null sein kann. (Field.java:238) unter
org.apache.lucene.document.StringField. (StringField.java:6 1) bei
lucene.Lucenetest.indexDocs1 (Lucenetest.java:80) bei
lucene.Lucenetest.main (Lucenetest.java:56)

nicht wirklich sicher, was ich verpasst.

+0

Ich erhalte Fehler als Ausnahme, Indizierung Verzeichnis 'MMapDirectory @ C: \ dbindex [email protected]' ... java.lang.IllegalArgumentException: Wert darf nicht null sein \t bei org.apache.lucene.document.Field. (Feld.java:238) \t bei org.apache.lucene.document.StringField. (StringField.java:61) \t bei lucene.Lucenetest.indexDocs1 (Lucenetest.java:80) \t bei lucene.Lucenetest.main (Lucenetest.java:56) ............ ... Nicht wirklich sicher, was ich verpasst habe –

Antwort

0

Wo Sie diese Ausnahme markiert haben, die in Ihrem Code auftritt, macht keinen Sinn. Diese Ausnahme wird innerhalb Ihrer IndexDocs1 Methode ausgelöst.

StringField und TextField werden beide eine IllegalArgumentException auslösen, wenn der Wert (oder Feldname) null ist. Wenn Sie aus einem Nullwert-Feld in Ihrer Datenbank importieren, sollten Sie nach Nullwerten suchen und das Feld entweder überspringen oder durch einen Standardwert ersetzen (ein Standardwert ist sehr nützlich, wenn Sie Nullen abfragen können).

Auch: Ihr Directory sollte ein Verzeichnis sein. Die Linie:

Directory indexDir = FSDirectory.open(new File("C:/dbindex/index.txt").toPath()); 

wird ein neues Verzeichnis namens "index.txt", nicht eine Datei erstellen. Wenn eine solche Datei bereits existiert, wird die Zeile eine FileAlreadyExistsException werfen.

+0

verwirrt: Vergessen Sie all diese Dinge .. machen Sie es klar, was Sie sagen wollen ... besser, wenn Sie in meinem Code schreiben und zeigen –

+0

Nicht sicher, wie es klarer zu machen . Beim Erstellen eines Dokuments müssen Sie nach Nullwerten suchen. So einfach ist das. – femtoRgon