第一阶段:
1.建立普通POJO类
package com.citi.test.lucence;
public class User {
private int id;
private String firstName;
private String lastName; public User(){ } public User(int id, String firstName, String lastName) {
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 com.citi.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.LockObtainFailedExceptio
n; import org.apache.lucene.util.Version; public class UserSearch {
private static final File INDEX_DIR = new File("e:\\lucene\\index");
private Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
public void createIndex(List<User> list) throws CorruptIndexException, LockObtainFailedException, IOException {
IndexWriter writer = openWriter();
try {
for (User user : list) {
Document document = buildDocument(user);
writer.addDocument(document); } } finally {
writer.close(); } }
private IndexWriter openWriter() throws CorruptIndexException, LockObtainFailedException, IOException {
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, analyzer);
iwc.setOpenMode(OpenMode.CREATE);
return new IndexWriter(FSDirectory.open(INDEX_DIR), iwc); }
private Document buildDocument(User user) {
Document document = new Document();
Field id = new Field("id", String.valueOf(user.getId()), Field.Store.YES, Field.Index.ANALYZED); Field lastName = new Field("lastName", user.getLastName(), Field.Store.YES, Field.Index.ANALYZED); Field firstName = new Field("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, String criteria) throws CorruptIndexException, IOException, ParseException {
IndexReader reader = IndexReader.open(FSDirectory.open(INDEX_DIR));
IndexSearcher searcher = new IndexSearcher(reader);
List<User> list = new ArrayList<User>();
try {
Query query = buildQuery(fieldName, criteria);
TopDocs topDocs = 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++){ Document doc = searcher.doc(scoreDocs[i].doc); User user = 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) throws ParseException {
QueryParser parser = new QueryParser(Version.LUCENE_35, fieldName, analyzer);
return parser.parse(criteria); } } 3.主函数入口
package com.citi.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 (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-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 = new UserSearch();
try { us.createIndex(list); System.out.println("create success!"); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void search() throws CorruptIndexException, IOException, ParseException {
UserSearch us = new UserSearch(); // 查询条件 List<User> list = us.search("lastName", "象"); if (list.size() > 0) { System.out.println("找到:" + list.size() + "个结果! "); for (User info : list) { System.out.println("id=" + info.getId() + ",name=" + info.getFirstName() + info.getLastName()); } } else { System.out.println("没有找到结果"); }
} }