2012-10-29 65 views
4

對於不同的原因,我有Lucene的API最新發布的工作。Lucene的4.0重寫最後一個方法的TokenStream

的API沒有很好的記載又如此,我發現自己不能夠進行簡單的addDocument()

這裏是Writer初始化:

analyzer = new StopAnalyzer(Version.LUCENE_40); 
config = new IndexWriterConfig(Version.LUCENE_40, analyzer); 
writer = new IndexWriter(FSDirectory.open(new File(ConfigUtil.getProperty("lucene.directory"))), config); 

簡單toDocument方法:

public static Document getDocument(User user) { 
    Document doc = new Document(); 
    FieldType storedType = new FieldType(); 
    storedType.setStored(true); 
    storedType.setTokenized(false); 

    // Store user data 
    doc.add(new Field(USER_ID, user.getId().toString(), storedType)); 
    doc.add(new Field(USER_NAME, user.getFirstName() + user.getLastName(), storedType)); 

    FieldType unstoredType = new FieldType(); 
    unstoredType.setStored(false); 
    unstoredType.setTokenized(true); 

    // Analyze Location 
    String tokens = ""; 
    if (user.getLocation() != null && ! user.getLocation().isEmpty()){ 
     for (Tag location : user.getLocation()) tokens += location.getName() + " "; 
     doc.add(new Field(USER_LOCATION, tokens, unstoredType)); 
    } 
} 

當運行:

Document userDoc = DocumentManager.getDocument(userWrap); 
IndexAccess.getWriter().addDocument(userDoc); 

這是錯誤消息我得到:

class org.apache.lucene.analysis.util.ReusableAnalyzerBase overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;

它可能是一個簡單的事情,但我找不到任何參考幫助解決這個問題。我使用的是默認analyzer我跟着,以避免過時Field.Index.ANALYZED

回答

2

教程這是由於某種JAR的版本不匹配。你可能依賴於一個contrib JAR,而這個JAR又取決於不同版本的Lucene。嘗試在運行時獲得確切的依賴關係集並查找任何版本不匹配。

+0

你好,感謝您的答覆。在覈心JAR中​​沒有'Analyzer Class',因此我下載了'lucene-analysers-common-4.0.jar'。你知道這是否是官方的做法嗎? – Ionut

+0

在覈心Lucene中沒有'Analyzer'是非常不可能的,因爲這個類是索引過程的基礎。我發現它的[文件]中(http://lucene.apache.org/core/4_0_0-BETA/core/org/apache/lucene/analysis/Analyzer.html)。 –

+0

我也覺得奇怪,你用'org.apache.lucene.analysis.util.ReusableAnalyzerBase'因爲這個類是不正常的發現...... util包,但在...分析。這也是一個核心課程。 –

相關問題