使用 Lucene 突出显示结果
Highlighting results with Lucene
QueryScorer queryScorer = new QueryScorer(query, "title");
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
Highlighter highlighter = new Highlighter(queryScorer); // Set the best scorer fragments
highlighter.setTextFragmenter(fragmenter); // Set fragment to highlight
SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
IndexReader indexReader = searchFactory.getIndexReaderAccessor().open(SearchResult.class);
indexSearcher = new IndexSearcher(indexReader);
// STEP C
System.out.println("");
ScoreDoc scoreDocs[] = indexSearcher.search(query, 20).scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document document = indexSearcher.doc(scoreDoc.doc);
String title = document.get("title");
TokenStream tokenStream = analyzer.tokenStream("title", new StringReader(title));
LOG.info(String.format("TEXTE BRUT: %s", title));
String fragment = highlighter.getBestFragments(tokenStream, title, 3, "...");
LOG.log(Level.INFO, "--------- FRAGMENT search : ", fragment);
我在尝试获得突出显示的结果时遇到此错误:
无法在服务模块加载程序的模块 "deployment.dev-1.0.war:main" 中定义 class org.apache.lucene.search.highlight.TermVectorLeafReader:java.lang.VerifyError:
无法 link org/apache/lucene/search/highlight/TermVectorLeafReader(来自服务模块加载程序的模块 "deployment.scob-1.0.war:main"):class org.apache.lucene.search.highlight.TermVectorLeafReader 覆盖最终方法条款。(Ljava/lang/String;)Lorg/apache/lucene/index/Terms;
当使用与预期的 Apache Lucene 版本不兼容的 Highlighter
版本时,您将得到这样的 VerifyError
。
验证您的应用服务器正在使用哪个版本的 Lucene 并获取匹配版本的 Highlighter。
QueryScorer queryScorer = new QueryScorer(query, "title");
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
Highlighter highlighter = new Highlighter(queryScorer); // Set the best scorer fragments
highlighter.setTextFragmenter(fragmenter); // Set fragment to highlight
SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
IndexReader indexReader = searchFactory.getIndexReaderAccessor().open(SearchResult.class);
indexSearcher = new IndexSearcher(indexReader);
// STEP C
System.out.println("");
ScoreDoc scoreDocs[] = indexSearcher.search(query, 20).scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document document = indexSearcher.doc(scoreDoc.doc);
String title = document.get("title");
TokenStream tokenStream = analyzer.tokenStream("title", new StringReader(title));
LOG.info(String.format("TEXTE BRUT: %s", title));
String fragment = highlighter.getBestFragments(tokenStream, title, 3, "...");
LOG.log(Level.INFO, "--------- FRAGMENT search : ", fragment);
我在尝试获得突出显示的结果时遇到此错误:
无法在服务模块加载程序的模块 "deployment.dev-1.0.war:main" 中定义 class org.apache.lucene.search.highlight.TermVectorLeafReader:java.lang.VerifyError:
无法 link org/apache/lucene/search/highlight/TermVectorLeafReader(来自服务模块加载程序的模块 "deployment.scob-1.0.war:main"):class org.apache.lucene.search.highlight.TermVectorLeafReader 覆盖最终方法条款。(Ljava/lang/String;)Lorg/apache/lucene/index/Terms;
当使用与预期的 Apache Lucene 版本不兼容的 Highlighter
版本时,您将得到这样的 VerifyError
。
验证您的应用服务器正在使用哪个版本的 Lucene 并获取匹配版本的 Highlighter。