1.lucene概念
全文检索只是一个概念,而具体实现有很多框架,lucene是其中的一种。
2.lucene6.0
使用的是lucene6.0需要jdk版本在 1.8 以上
3.luncene初步体验
创建索引
/**
* 1.创建article对象
* 2.创建IndexWriter对象
* 3.把article对象变成document对象
* 4.把document对象放到索引库中
* 5.关闭资源
*/
Article article =new Article();
article.setAid(1L);
article.setTitle("lucene是一个全文检索引擎");
article.setContent("baidu,google都是很好的全文检索引擎");
//创建第一个参数索引库路径
final Path docDir = Paths.get("index");
Directory directory=FSDirectory.open(Paths.get("index"));
//创建第二个参数indexWriter配置
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
//创建indexWriter
IndexWriter indexWriter=new IndexWriter(directory,iwc);
//创建document
Document document=new Document();
Field idField=new Field("aid", article.getAid().toString(), TextField.TYPE_STORED);
Field titleField=new Field("title", article.getTitle().toString(), TextField.TYPE_STORED);
Field contentField=new Field("content", article.getContent().toString(), TextField.TYPE_STORED);
document.add(idField);
document.add(titleField);
document.add(contentField);
indexWriter.addDocument(document);
indexWriter.close();
2.从索引库中根据关键字把信息检索出来
/**
* 创建一个indexSerach
*/
Directory directory=FSDirectory.open(Paths.get("index"));
IndexReader r =DirectoryReader.open(directory);
IndexSearcher indexSearcher=new IndexSearcher(r);
Analyzer analyzer = new StandardAnalyzer();
//第一个参数查找的关键字,第二个参数分词器
QueryParser queryParser=new QueryParser("title", analyzer);
Query query=queryParser.parse("lucene");
//根据query查找出来的结果集
ScoreDoc[] scoreDocs = indexSearcher.search(query, 1).scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
int index=scoreDoc.doc;
Document document=indexSearcher.doc(index);
//把document转换成article
Article article=new Article();
article.setAid(Long.parseLong(document.get("aid")));
article.setContent(document.get("content"));
article.setTitle(document.get("title"));
System.out.print(article.getTitle());
}
r.close();
directory.close();
4.注意点
article.setAid(1L);
article.setTitle("lucene是一个全文检索引擎");
article.setContent("baidu,google都是很好的全文检索引擎");
Field idField=new Field("aid", article.getAid().toString(), TextField.TYPE_STORED);
Field titleField=new Field("title", article.getTitle().toString(), TextField.TYPE_STORED);
Field contentField=new Field("content", article.getContent().toString(), TextField.TYPE_STORED);
在创建索引的时候,我们创建了一个article对象,并且赋值
同时创建field的时候分别为三个属性添加了aid、title、content三个key
QueryParser queryParser=new QueryParser("title", analyzer);
Query query=queryParser.parse("lucene");
在用的时候我就好奇为啥用的是title和lucene这两个字段,然后我测试才发现,在new QueryParser(“title”, analyzer)中表示要查找的目标值是在title这个字段中
queryParser.parse(“lucene”)表示在title中查找含有lucene的值。