(Java) ошибка при выделении слова в Lucene
пытаюсь выделить найденные слова тегами. Программа работает до строчки:
TextFragment[] frag = highlighter.getBestTextFragments(tokenStream, text, false, 1);
и выдает такой сообщение:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.lucene.index.FieldInfo.<init>(Ljava/lang/String;IZZZLorg/apache/lucene/index/IndexOptions;Lorg/apache/lucene/index/DocValuesType;JLjava/util/Map;II)V
at org.apache.lucene.index.memory.MemoryIndex.createFieldInfo(MemoryIndex.java:503)
at org.apache.lucene.index.memory.MemoryIndex.getInfo(MemoryIndex.java:486)
at org.apache.lucene.index.memory.MemoryIndex.addField(MemoryIndex.java:473)
at org.apache.lucene.index.memory.MemoryIndex.addField(MemoryIndex.java:452)
at org.apache.lucene.index.memory.MemoryIndex.addField(MemoryIndex.java:431)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.getLeafContext(WeightedSpanTermExtractor.java:402)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.extractWeightedTerms(WeightedSpanTermExtractor.java:361)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.extract(WeightedSpanTermExtractor.java:140)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.extract(WeightedSpanTermExtractor.java:111)
at org.apache.lucene.search.highlight.WeightedSpanTermExtractor.getWeightedSpanTerms(WeightedSpanTermExtractor.java:510)
at org.apache.lucene.search.highlight.QueryScorer.initExtractor(QueryScorer.java:218)
at org.apache.lucene.search.highlight.QueryScorer.init(QueryScorer.java:186)
at org.apache.lucene.search.highlight.Highlighter.getBestTextFragments(Highlighter.java:201)
at com.mycompany.example.HighLightTest.myTest(HighLightTest.java:96)
at com.mycompany.example.Test.main(Test.java:87)
Весь код программы:
FieldType type = new FieldType();
type.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
type.setStored(true);
type.setStoreTermVectors(true);
type.setTokenized(true);
type.setStoreTermVectorOffsets(true);
Field field = new Field("title", "How to read UTF8 text file into String in Java", type); //term vector enabled
Field f = new TextField("content", "How to read UTF8 text file into String in Java", Field.Store.YES);
Document doc1 = new Document();
doc1.add(field);
doc1.add(f);
Query query = new QueryParser("title", analyzer).parse("read file string utf8");
String outputDir = "E:\\Projects\\Data\\rubrics\\luceneResult";
Directory directory = FSDirectory.open(Paths.get(outputDir));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
config.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(directory, config);
indexWriter.addDocument(doc1);
indexWriter.close();
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(reader);
TopDocs topDocs = indexSearcher.search(query, 100);
// Используем подсветку только при наличии совпадающих документов
if (topDocs.totalHits > 0) {
// По умолчанию используется подсветка <B> </ B>
// SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter();
// Выборочная подсветка
SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter("<strong>", "</strong>");
Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query));
for (int i = 0; i < 10; i++) {
int id = topDocs.scoreDocs[i].doc;
Document doc = indexSearcher.doc(id);
String text = doc.get("content");
TokenStream tokenStream = TokenSources.getAnyTokenStream(indexSearcher.getIndexReader(), id, "content", analyzer);
TextFragment[] frag = highlighter.getBestTextFragments(tokenStream, text, false, 1);// highlighter.getBestFragments(tokenStream,
// text,
// 3,
// "...");
for (int j = 0; j < frag.length; j++) {
if ((frag[j] != null) && (frag[j].getScore() > 0)) {
System.out.println((frag[j].toString()));
}
}
// Term vector
text = doc.get("name");
tokenStream = TokenSources.getAnyTokenStream(indexSearcher.getIndexReader(), topDocs.scoreDocs[i].doc, "name",
analyzer);
frag = highlighter.getBestTextFragments(tokenStream, text, false, 10);
for (int j = 0; j < frag.length; j++) {
if ((frag[j] != null) && (frag[j].getScore() > 0)) {
System.out.println((frag[j].toString()));
}
}
System.out.println("-------------");
}
}
}
Подскажите как быть, что я делаю не так? Не очень хорошо знаком с Lucene, поэтому буду рад любой помощь, заранее спасибо.