/**
* 1、能不能设置很多个索引库
* 可以设置很多个索引库
* 2、索引库能不能合并起来
* 如果是内存索引库
* Directory ramDirectory = new RamDirectory(Directory d);
* 这样就可以把一个索引库放入到内存索引库中
* 利用IndexWriter.addIndexesNoOptimize方法可以把很多个索引库进行合并操作
* 3、应用程序能不能在内存中和索引库进行交互
* @author Administrator
*
*/
public class DirectoryTest {
/**
* 内存索引库
* * 速度比较快
* * 数据是暂时的
* * 内存索引库和文件索引库的特点正好互补
*/
@Test
public void testRam() throws Exception{
Directory directory = new RAMDirectory();
IndexWriter indexWriter = new IndexWriter(directory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);
Article article = new Article();
article.setId(1L);
article.setTitle("lucene可以做搜索引擎");
article.setContent("baidu,google都是很好的搜索引擎");
indexWriter.addDocument(DocumentUtils.article2Document(article));
indexWriter.close();
this.showData(directory);
}
private void showData(Directory directory) throws Exception{
IndexSearcher indexSearcher = new IndexSearcher(directory);
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30,new String[]{"title","content"},LuceneUtils.analyzer);
Query query = queryParser.parse("lucene");
TopDocs topDocs = indexSearcher.search(query, 10);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<Article> articleList = new ArrayList<Article>();
for(ScoreDoc scoreDoc:scoreDocs){
Document document = indexSearcher.doc(scoreDoc.doc);
articleList.add(DocumentUtils.document2Article(document));
}
for(Article article:articleList){
System.out.println(article.getId());
System.out.println(article.getTitle());
System.out.println(article.getContent());
}
}
/**
* 文件索引库和内存索引库的结合
*/
@Test
public void testRamAndFile() throws Exception{
/**
* 1、当应用程序启动的时候,把文件索引库的内容复制到内存库中
* 2、让内存索引库和应用程序交互
* 3、把内存索引库的内容同步到文件索引库
*/
Directory fileDirectory = FSDirectory.open(new File("./indexDir"));
Directory ramDirectory = new RAMDirectory(fileDirectory);
IndexWriter ramIndexWriter = new IndexWriter(ramDirectory,LuceneUtils.analyzer,MaxFieldLength.LIMITED);
IndexWriter fileIndexWriter = new IndexWriter(fileDirectory,LuceneUtils.analyzer,true,MaxFieldLength.LIMITED);
/**
* 在内存索引库中根据关键词查询
*/
this.showData(ramDirectory);
System.out.println("上面的是从内存索引库中查询出来的");
/**
* 把一条信息插入到内存索引库
*/
Article article = new Article();
article.setId(1L);
article.setTitle("lucene可以做搜索引擎");
article.setContent("baidu,google都是很好的搜索引擎");
ramIndexWriter.addDocument(DocumentUtils.article2Document(article));
ramIndexWriter.close();
/*
* 把内存索引库中的内容同步到文件索引库中
*/
fileIndexWriter.addIndexesNoOptimize(ramDirectory);
fileIndexWriter.close();
this.showData(fileDirectory);
System.out.println("上面的是从文件索引库中查询出来的");
}
}
Lucene-与索引库的交互
最新推荐文章于 2020-11-14 18:21:49 发布