出于不同的原因,我必须使用最新版本的Lucene API。
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
答案 0 :(得分:2)
这是由于某种JAR版本不匹配造成的。您可能依赖于contrib JAR,而JAR又依赖于不同版本的Lucene。尝试在运行时保持确切的依赖集,并查找任何版本不匹配。