1、创建索引
package demo;
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;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.LockObtainFailedException;
public class CreateIndex {
public static void main(String[] args) throws CorruptIndexException, LockObtainFailedException, IOException {
//创建标准分析器 可用于分词
Analyzer luceneAnalyzer = new StandardAnalyzer();
//索引文件所在目录 分析器 索引文件没有创建 ,有就覆盖(false:在原来的基础上创建) 域的长度没有限制
IndexWriter indexWriter = new IndexWriter("e:/sou",luceneAnalyzer,true,IndexWriter.MaxFieldLength.UNLIMITED);
//创建字符串数组
String[] arrstr = new String[18];
arrstr[0]="昭珂 刘ajax jsf spring ";
arrstr[1]="小鹿 中鹿 老鹿 ";
arrstr[2]="DNF 张冲 asp.net c# 北京 ";
arrstr[3]="王衍伟 山东 北京大学 ";
arrstr[4]="张永博 美女 ";
arrstr[5]="朱翠武 撒旦 ";
arrstr[6]="纪伟乔 奥运 ";
arrstr[7]="孙海龙 纽约 五角大楼 ";
arrstr[8]="利辉徐 魔兽世界 ";
arrstr[9]="薛 新峰 北京 联想公司 ";
arrstr[10]="孙 津津 jquery ";
arrstr[11]="马 晨智 java工程师 ";
arrstr[12]="丁 钰 清华大学 美女 ";
arrstr[13]="港港 卢 人体艺术 ";
arrstr[14]="刘 宗武 柑橘 ";
arrstr[15]="刘 宗武 白果 ";
arrstr[16]="刘 宗武 鸭梨 ";
arrstr[17]="刘 宗武 哈密瓜 ";
int i=0;
for (String str:arrstr){
i++;
//Document相当于一行记录
Document doc=new Document();
// Field相当于一个字段 名字 是否存储 不作为搜索字段
Field fid=new Field("id",""+i, Field.Store.YES,Field.Index.NO);
// 名字 字段值 存储 作为搜索字段
Field fbody=new Field("body",str,Field.Store.YES,Field.Index.ANALYZED);
doc.add(fid);
doc.add(fbody);
indexWriter.addDocument(doc);
}
//写向文件
indexWriter.optimize();
//当调用close时候才将索引存入磁盘
indexWriter.close();
}
}
2、搜索
package demo;
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.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.TopDocs;
public class SearchIndex {
public static void main(String[] args) throws CorruptIndexException, IOException, ParseException{
String queryString = "刘 山东";
//索引搜索器
IndexSearcher searcher=new IndexSearcher("e:/sou");
//创建标准分析器 可用于分词
Analyzer luceneAnalyzer = new StandardAnalyzer();
//查询解析器
QueryParser parser=new QueryParser("body" ,luceneAnalyzer );
//把分析结果放入Query对象存储
Query query=parser.parse(queryString);
//创建容器
TopDocCollector collector=new TopDocCollector(5);
//搜索 传入分析结果 存储搜索结果
searcher.search(query, collector);
//处理 等到Document对象
TopDocs topDocs=collector.topDocs();
ScoreDoc[] score=topDocs.scoreDocs;
for(ScoreDoc s:score ){
//获得document 的唯一标识
int docId=s.doc;
//根据唯一标识 查找Document对象
Document doc=searcher.doc(docId);
//根据域名字取域对应的值
System.out.println(doc.get("id")+":"+doc.get("body"));
}
}
}