您的位置:首页 > 其它

LUCENE入门

2012-08-07 22:44 260 查看
第一阶段:

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.LockObtainFailedException;

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("没有找到结果");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: