1.1 准备lucene的开发环境
搭建lucene的开发环境,要准备lucene的jar包,要加入的jar包至少有:
1) lucene-core-3.1.0.jar (核心包)
2) lucene-analyzers-3.1.0.jar (分词器)
3) lucene-highlighter-3.1.0.jar (高亮器)
4) lucene-memory-3.1.0.jar (高亮器)
public class Article {
private Long id;
private String title;
private String content;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
@Test
public void testCreateIndex() throws Exception{
/**
* 1、创建一个article对象,并且把信息存放进去
* 2、调用indexWriter的API把数据存放在索引库中
* 3、关闭indexWriter
*/
//创建一个article对象,并且把信息存放进去
Article article = new Article();
article.setId(1L);
article.setTitle("lucene可以做搜索引擎");
article.setContent("baidu,google都是很好的搜索引擎");
//调用indexWriter的API把数据存放在索引库中
/**
* 创建一个IndexWriter
* 参数三个
* 1、索引库 指向索引库的位置
* 2、分词器
*/
//创建索引库
Directory directory = FSDirectory.open(new File("./indexDir"));
//创建分词器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter indexWriter = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED);
//把一个article对象转化成document
Document document = new Document();
Field idField = new Field("id",article.getId().toString(),Store.YES,Index.NOT_ANALYZED);
Field titleField = new Field("title",article.getTitle(),Store.YES,Index.ANALYZED);
Field contentField = new Field("content",article.getContent(),Store.YES,Index.ANALYZED);
document.add(idField);
document.add(titleField);
document.add(contentField);
indexWriter.addDocument(document);
//关闭indexWriter
indexWriter.close();
}
@Test
public void testSearchIndex() throws Exception{
/**
* 1、创建一个 IndexSearch对象
* 2、调用search方法进行检索
* 3、输出内容
*/
//创建一个 IndexSearch对象
Directory directory = FSDirectory.open(new File("./indexDir"));
IndexSearcher indexSearcher = new IndexSearcher(directory);
//调用search方法进行检索
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
QueryParser queryParser = new QueryParser(Version.LUCENE_30,"content",analyzer);
Query query = queryParser.parse("baidu");//关键词
TopDocs topDocs = indexSearcher.search(query, 2);
int count = topDocs.totalHits;//根据关键词查询出来的总的记录数
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<Article> articleList = new ArrayList<Article>();
for(ScoreDoc scoreDoc:scoreDocs){
float score = scoreDoc.score;//关键词得分
int index = scoreDoc.doc;//索引的下标
Document document = indexSearcher.doc(index);
//把document转化成article
Article article = new Article();
article.setId(Long.parseLong(document.get("id")));//document.getField("id").stringValue()
article.setTitle(document.get("title"));
article.setContent(document.get("content"));
articleList.add(article);
}
for(Article article:articleList){
System.out.println(article.getId());
System.out.println(article.getTitle());
System.out.println(article.getContent());
}
}