2016-03-23 4 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 

    } 
} 

nullにすることはできません、私はディレクトリに索引付け、例外を取得しています:のLucene errror:インデックスディレクトリに 'C:/インデックス' ... 1234 java.lang.IllegalArgumentExceptionがを追加:値は1002ミリ秒総

MMapDirectory @ C:\ dbindex [email protected]' ...
java.lang.IllegalArgumentExceptionが:値が
org.apache.lucene.document.Fieldでnullにすることはできません。 (Field.java:238)at
org.apache.lucene.document.StringField。(StringField.java:6 1)
lucene.Lucenetest.main(Lucenetest.java:56)

ない私は逃したものを実際に確実で
lucene.Lucenetest.indexDocs1(Lucenetest.java:80)で。

+0

私は例外、 インデックスディレクトリに 'MMapDirectoryする@ C:\ dbindex [email protected]' としてエラーを取得しています... java.lang.IllegalArgumentExceptionが:値は nullにすることはできませんorg.apache.lucene.document.Fieldの\t。 (Field.java:238) \t(org.apache.lucene.document.StringField) (StringField.java:61) \t、lucene.Lucenetest.indexDocs1(Lucenetest.java:80) \t lucene.Lucenetest.main(Lucenetest.java:56)............ ... 私が逃したものは分かりません –

答えて

0

あなたのコードでこの例外が発生している箇所は理にかなっていません。この例外は、IndexDocs1メソッド内でスローされています。

StringFieldおよびTextFieldは、値(またはフィールド名)がnullの場合にIllegalArgumentExceptionをスローします。データベースのnull可能フィールドからインポートする場合は、NULL値をチェックしてフィールドをスキップするか、デフォルト値に置き換えるか(NULLを照会できるようにする場合は、デフォルト値を使用すると非常に便利です)。

また、Directoryはディレクトリである必要があります。ライン:

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

は "index.txtの" と呼ばれる新しいディレクトリ、ないファイルが作成されます。そのようなファイルがすでに存在する場合は、FileAlreadyExistsExceptionとします。

+0

混乱しています:これらのこと全てを忘れています。何を言おうとしているのかを明確にしてください...あなたが自分のコードに書き込んで表示した方が良いです –

+0

もっと明確にする方法がわかりません。文書を作成するときには、ヌル値をチェックする必要があります。そのような単純な。 – femtoRgon

関連する問題