2016-03-21 25 views
0

こんにちは私はデータベースレコードのインデックスを作成するためにLuceneに取り組んでいますが、このエラーを解決することはできません。スレッド "main"の例外java.lang.Error LUCENE

エラー:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: Directory cannot be resolved to a type The method open(Path) in the type FSDirectory is not applicable for the arguments (File)

at lucene.Lucenetest.main(Lucenetest.java:32)

CODE:はっきりLucenetestができることを

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()) { 

// nullをチェックし、それが

 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

にエラーを追加できるように言いますコンパイルされません。 理由はFSDirectoryがjava.nio.file.Pathを予期していますが、互換性がないjava.io.Fileを受け取ります。
コードがhttps://lucene.apache.org/core/3_0_3/api/core/org/apache/lucene/store/FSDirectory.htmlを受け入れたLuceneの以前のバージョン用に開発されたようです。最近の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()); 
+0

そうにエラーのある行を変更することです!私はそれに気付きませんでしたが、現在は動作していますが、JDBC接続に問題があります。 –

+0

'CONNECTION_URL =" jjdbc:sqlserver:// WMDENTW1 \\ SQLEXPRESS:1433; "で誤字が見えます。 – Evgeny

+0

コードは動作していますが、エラーが発生していて、LUKEを使用してインデックスファイルを参照できませんでした。 エラー: ディレクトリ 'MMapDirectory @ C:\ dbindex lockFactory = org.apache.lucene.store.NativeFSLockFactory @ 4493d195 '... java.lang.IllegalArgumentException:値にnullを設定することはできません。 \t at org.apache.lucene.document.Field。 (Field.java:238) \t(org.apache.lucene.document.Field) (Field.java:960)lucene.Lucenetest.indexDocs1(Lucenetest.java:80)で \t lucene.Lucenetest.main(Lucenetest.java:56) –

関連する問題