lucene 简单实现
public class TestLucene {
/**
*
* 使用indexWriter 对数据建立索引..
* @throws IOException
*/
@Test
public void testCreateIndex() throws IOException{
//索引存放的位置.... 1
Directory directory=FSDirectory.open(new File("indexDir/"));
//lucene 当前使用的匹配版本... 2
Version matchVersion=Version.LUCENE_44;
//分词器 (对文本进行分词...)
//我是中国人
//也是醉了,正能量,逗比,带你装b带你飞 3
Analyzer analyzer=new StandardAnalyzer(matchVersion);
//索引写入的配置... 4
IndexWriterConfig writerConfig=new IndexWriterConfig(matchVersion, analyzer);
//构建用于操作索引的类 5
IndexWriter indexWriter=new IndexWriter(directory, writerConfig);
//通过indexWriter 来创建索引...
//索引库里面的要遵守一定的结构,(索引结构...) document
Document doc=new Document();
//索引document 里面也有很多的字段..
/**
* 1:字段的名称
* 2:字段对应的值
* 3:该字段在索引库当中是否存储...
*
* 这里耦合度较高因为把初始化和给索引库和索引文件值写在一个方法里
*/
IndexableField field=new IntField("id", 1, Store.YES);
IndexableField title=new StringField("title", "你们都是大神", Store.YES);
IndexableField content=new TextField("content", "做最好的自己,时刻保持恐惧感",Store.YES);
doc.add(field);
doc.add(title);
doc.add(content);
indexWriter.addDocument(doc);
indexWriter.close();
}
/**
* 使用indexSearcher 对数据进行搜索...
* @throws IOException
*
*
*/
@Test
public void testSearcher() throws IOException{
//索引存放的位置....
Directory directory=FSDirectory.open(new File("indexDir/"));
IndexReader indexReader=DirectoryReader.open(directory);
//通过indexSearcher 去检索索引目录...
IndexSearcher indexSearcher=new IndexSearcher(indexReader);
//我们以后只要根据索引查找,整个过程肯定要分两次..
//这个是一个搜索条件..,通过定义条件来进行查找...
//term 我需要根据那个字段进行检索,字段对应的值...
/*
此处耦合度较高,初始化和搜索以及结果遍历写在了一起
*/
Query query=new TermQuery(new Term("title","大神"));
//搜索先搜索索引目录..
//找到符合query 条件的前面N条记录...
TopDocs topDocs=indexSearcher.search(query,100);
System.out.println("总记录数==="+topDocs.totalHits);
ScoreDoc scoreDocs[]=topDocs.scoreDocs;
//返回一个击中..
for(ScoreDoc scoreDoc:scoreDocs){
int docID=scoreDoc.doc;
Document document=indexSearcher.doc(docID);
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
}
版权声明:本文为a519781181原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。