packagech.lucene.app;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.index.IndexWriter;
importorg.apache.lucene.queryParser.QueryParser;
importorg.apache.lucene.search.IndexSearcher;
importorg.apache.lucene.search.Query;
importorg.apache.lucene.search.ScoreDoc;
importorg.apache.lucene.search.TopDocs;
importorg.apache.lucene.search.highlight.Formatter;
importorg.apache.lucene.search.highlight.Highlighter;
importorg.apache.lucene.search.highlight.QueryScorer;
importorg.apache.lucene.search.highlight.Scorer;
importorg.apache.lucene.search.highlight.SimpleHTMLFormatter;
importorg.junit.Test;
importch.lucene.entity.Article;
importch.lucene.utils.LuceneUtils;
publicclassFourApp {
@Test
public
void createIndexDB()throwsException {
Articleart
=
newArticle(1,
"標題",
"搜索標題的內容是什麼呢?Lucene學習學習哈哈哈"
);
Documentdoc
= LuceneUtils.javaBeanToDocument(art);
IndexWriterindexWriter=newIndexWriter(LuceneUtils.getDirectory(),
LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength() );
indexWriter.addDocument(
doc);
indexWriter.close();
}
@Test
public
void searchByKeyword ()throwsException{
String
keyword =
"標題";
List<Article>list
=
newArrayList<Article>();
IndexSearcherindexSearcher
=
newIndexSearcher(LuceneUtils.getDirectory());
QueryParserqueryParser
=
newQueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
Query
query =
queryParser.parse(
keyword);
TopDocs
topDocs =
indexSearcher.search(
query, 100);
//格式對象
Formatterformatter
=
newSimpleHTMLFormatter("<font color='red'>",
"</font>"
);
//關鍵字對象
Scorerscorer
=
newQueryScorer(
query);
//高亮對象
Highlighterhighlighter
=
newHighlighter(formatter,scorer
);
for(
int
i=0;
i<
topDocs.
scoreDocs.
length;
i++){
ScoreDocscoreDoc
=
topDocs.scoreDocs[i];
int
no =
scoreDoc.
doc;
Documentdoc
=
indexSearcher.doc(no);
//關鍵字高亮
StringtitleHighlighter
=
highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"title",doc.get("title"));
StringcontentHighlighter
=
highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"content",doc.get("content"));
//System.out.println(contentHighlighter+"....");
//將高亮後結果封裝回document對象中
doc.getField("title").setValue(titleHighlighter);
doc.getField("content").setValue(contentHighlighter);
Articlearticle
= (Article) LuceneUtils.documentToJavaBean(doc, Article.class);
list.add(
article);
}
for(Article
a :
list){
System.out.println(a);
}
}
}