当前位置: 首页 > 知识库问答 >
问题:

线程“main”java.lang.error出现异常

桂智志
2023-03-14

你好,我正在Lucene上工作,以索引我的数据库记录,但我无法解决这个错误。

错误:

    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 = "jjdbc: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));***

    try{  
//index writer
       Class.forName(JDBC_DRIVER).newInstance();  

       Connection conn = DriverManager.getConnection(CONNECTION_URL); 

       StandardAnalyzer analyzer = new StandardAnalyzer();  

       IndexWriterConfig Config = new IndexWriterConfig(analyzer);

       IndexWriter indexWriter = new IndexWriter(indexDir, Config);  

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

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

       indexWriter.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()) {  
        String FTID = resultSet.getString("FTID"); //!= null ? resultSet.getString("FTID"): " ";
        String ID = resultSet.getString("ID")!= null ? resultSet.getString("ID"): " ";

        String CLASSID = resultSet.getString("CLASSID")!= null ? resultSet.getString("CLASSID"): " ";

        String TEXT = resultSet.getString("TEXT")!= null ? resultSet.getString("TEXT"): " ";

        String PUBNOTICECONTENT = resultSet.getString("PUBNOTICECONTENT")!= null ? resultSet.getString("PUBNOTICECONTENT"): " ";
        String DOCUMENTCONTENT = resultSet.getString("DOCUMENTCONTENT")!= null ? resultSet.getString("DOCUMENTCONTENT"): " ";

                String contentSum_DE = resultSet.getString("contentSum_DE")!= null ? resultSet.getString("contentSum_DE"): " ";

         Document d = new Document();  
         d.add(new Field("FTID", rs.getString("FTID"), Field.Store.YES, Field.Index.NOT_ANALYZED));
         d.add(new Field("ID", rs.getString("ID"), Field.Store.YES, Field.Index.NOT_ANALYZED ));
         d.add(new Field("CLASSID", rs.getString("CLASSID"), Field.Store.YES, Field.Index.ANALYZED));

           if (writer.getConfig().getOpenMode() == OpenMode.CREATE) {
        // New index, so we just add the document (no old document can be there):
        System.out.println("adding " + FTID + " ---- " + ID + "---- " + CLASSID);
          writer.addDocument(doc);

        }

        }

} catch (Exception e) {
  System.out.println(e);
}

共有1个答案

傅花蜂
2023-03-14

错误清楚地表明Lucenetest无法编译。原因是FSDirectory需要java.nio.file.path,但接收到不兼容的java.io.file
看起来代码是为早期版本的Lucene开发的,该版本接受文件https://Lucene.apache.org/core/3_0_3/api/core/org/apache/Lucene/store/fsdirectory.html。最近的Lucene版本期望路径https://Lucene.apache.org/core/5_3_0/core/index.html?org/apache/Lucene/store/fsdirectory.html。
解决方案是将带有错误的行更改为

 Directory indexDir = FSDirectory.open(new File(PATH).toPath());
 类似资料: