第一阶段:
1.建立普通POJO类
package org.yinpeng.test.lucence;
public class User {
private int id;
private String firstName;
private String lastName;
public User(){
}
public User(int id, String firstName, StringlastName) {
this.id = id;
this.firstName =firstName;
this.lastName =lastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName){
this.firstName =firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
2.建立索引,以及查询方法
package org.yinpeng.test.lucence;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
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.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
public class UserSearch {
private static final File INDEX_DIR = newFile("e:\\lucene\\index");
private Analyzer analyzer = newStandardAnalyzer(Version.LUCENE_35);
public voidcreateIndex(List<User> list) throwsCorruptIndexException,
LockObtainFailedException,IOException {
IndexWriter writer =openWriter();
try {
for (Useruser : list) {
Documentdocument = buildDocument(user);
writer.addDocument(document);
}
} finally {
writer.close();
}
}
private IndexWriter openWriter() throwsCorruptIndexException,
LockObtainFailedException,IOException {
IndexWriterConfig iwc = newIndexWriterConfig(Version.LUCENE_35,
analyzer);
iwc.setOpenMode(OpenMode.CREATE);
return newIndexWriter(FSDirectory.open(INDEX_DIR), iwc);
}
private Document buildDocument(User user){
Document document = newDocument();
Field id = new Field("id",String.valueOf(user.getId()),
Field.Store.YES,Field.Index.ANALYZED);
Field lastName = newField("lastName", user.getLastName(),
Field.Store.YES,Field.Index.ANALYZED);
Field firstName = newField("firstName", user.getFirstName(),
Field.Store.YES,Field.Index.ANALYZED);
document.add(firstName);
document.add(lastName);
document.add(id);
return document;
}
public List search(String fieldName, Stringcriteria)
throwsCorruptIndexException, IOException, ParseException {
IndexReader reader =IndexReader.open(FSDirectory.open(INDEX_DIR));
IndexSearcher searcher = newIndexSearcher(reader);
List<User>list = new ArrayList<User>();
try {
Queryquery = buildQuery(fieldName, criteria);
TopDocstopDocs = searcher.search(query, 10);
int total= topDocs.totalHits;
System.out.println("total=" + total);
ScoreDoc[]scoreDocs = topDocs.scoreDocs;
for(int i =0;i<scoreDocs.length;i++){
Documentdoc = searcher.doc(scoreDocs[i].doc);
Useruser = new User();
user.setId(Integer.valueOf(doc.get("id")));
user.setFirstName(doc.get("firstName"));
user.setLastName(doc.get("lastName"));
list.add(user);
}
} finally {
reader.clone();
}
return list;
}
private Query buildQuery(String fieldName,String criteria)
throwsParseException {
QueryParser parser = newQueryParser(Version.LUCENE_35, fieldName,
analyzer);
returnparser.parse(criteria);
}
}
3.主函数入口
package org.yinpeng.test.lucence;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.store.LockObtainFailedException;
public class UserRun {
public static void main(String[] args) {
UserRun.init();
try {
UserRun.search();
} catch (CorruptIndexExceptione) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch (ParseException e){
// TODOAuto-generated catch block
e.printStackTrace();
}
}
public static void init() {
List<User>list = new ArrayList<User>();
list.add(new User(1, "大","象"));
list.add(new User(12, "老","象"));
list.add(new User(13, "小","象"));
list.add(new User(2, "老","虎"));
list.add(new User(3, "毛","二逼"));
list.add(new User(4, "熊","三炮"));
list.add(new User(6, "高","象"));
list.add(new User(2, "搞","对象"));
list.add(new User(5, "处","象"));
list.add(new User(7, "大","象"));
list.add(new User(9, "大","象"));
list.add(new User(11, "大","象"));
list.add(new User(111, "大","象"));
list.add(new User(13, "大","象"));
list.add(new User(122, "大","象"));
list.add(new User(133, "大","象"));
UserSearch us = newUserSearch();
try {
us.createIndex(list);
System.out.println("createsuccess!");
} catch (CorruptIndexExceptione) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch(LockObtainFailedException e) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
public static void search() throwsCorruptIndexException, IOException,
ParseException{
UserSearch us = newUserSearch();
// 查询条件
List<User>list = us.search("lastName", "象");
if (list.size()> 0) {
System.out.println("找到:"+ list.size() + "个结果! ");
for (Userinfo : list) {
System.out.println("id="+ info.getId() + ",name="
+info.getFirstName() + info.getLastName());
}
} else {
System.out.println("没有找到结果");
}
}
}