初识Lucene
package com.lucene;
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
/*
* 使用lucene对数据建立索引
*/
public class TestLucene {
/*
* 使用indexWriter对数据建立索引
*/
@Test
public void testCreateIndex() throws IOException{
//索引存放的位置
Directory diretory = FSDirectory.open(new File("indexDir"));
//lucene 当前使用的匹配版本
Version matchVersion = Version.LUCENE_44;
//分词器
Analyzer analyzer = new StandardAnalyzer(matchVersion);
//索引写入的配置
IndexWriterConfig writerConfig = new IndexWriterConfig(matchVersion, analyzer);
//创建用于索引的类
IndexWriter indexWriter = new IndexWriter(diretory, writerConfig);
//通过indexWriter来创建索引
//索引库里面的数据要遵守一定的结构(索引结构),docment就是索引结构
Document doc = new Document();
//索引docment里面也有很多字段
/*
* 1:字段的名称
* 2:字段对应的值
* 3:该字段在索引库中是否存储
*/
IndexableField field = new IntField("id",1,Store.YES);
IndexableField title = new StringField("title","java-lucene",Store.YES);
IndexableField content = new TextField("content","java培训的龙头老大,口碑最好的java培训机构",Store.YES);
doc.add(field);
doc.add(title);
doc.add(content);
indexWriter.addDocument(doc);
indexWriter.close();
}
/*
* 使用indexSearcher对数据进行索引
*/
@Test
public void testSearcher()throws IOException{
//索引存放的位置
Directory diretory = FSDirectory.open(new File("indexDir"));
IndexReader indexReader = DirectoryReader.open(diretory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
//我们以后只要根据索引查找,整个过程肯定要分两次
//这个一个搜索条件
//term 我需要根据那个字段的哪个值检索
Query query = new TermQuery(new Term("content","java"));
TopDocs topDocs = indexSearcher.search(query,100);
System.out.println("====总记录数===="+topDocs.totalHits);
ScoreDoc scoreDocs[] = topDocs.scoreDocs;
for(ScoreDoc scoreDoc: scoreDocs){
int docId = scoreDoc.doc;
Document docment =
indexSearcher.doc(docId);
System.out.println(docment.get("id"));
System.out.println(docment.get("content"));
System.out.println(docment.get("title"));
}
}
}
输出结果: