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
=
new
ArrayList<Article>();
IndexSearcher
indexSearcher
=
new
IndexSearcher(LuceneUtils.getDirectory());
QueryParser
queryParser
=
new
QueryParser(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
++){
ScoreDoc
scoreDoc
=
topDocs
.
scoreDocs
[
i
];
int
no
=
scoreDoc
.
doc
;
Document
doc
=
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);
Article
article
= (Article) LuceneUtils.documentToJavaBean(
doc
, Article.
class
);
list
.add(
article
);
}
for
(Article
a
:
list
){
System.
out
.println(
a
);
}
}
}