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("没有找到结果");
}
}
}
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("没有找到结果");
}
}
}
相关文章推荐
- lucene简单入门demo
- 【Lucene3.6.2入门系列】第04节_中文分词器
- 开发自己的搜索引擎——Lucene 2.0+Heriterx—— Heritrix的使用入门
- Lucene基础(一)--入门
- 全文检索Lucene入门之创建索引及简单搜索
- Lucene入门(1)
- lucene&solr从入门到精通-----删除,修改,查询
- Lucene6入门教程(一)简介和学习流程
- lucene入门-解析pdf(使用pdfbox解析英文PDF)
- Lucene第一篇【介绍Lucene、快速入门】
- Lucene第一天入门
- Lucene 简单入门
- Lucene 简单入门
- Lucene入门
- lucene3.6.1 经典案例 入门教程
- lucene入门合集
- 第61天(就业班) Lucene索引库优化、内置分词器、IK分词器、关键字高亮、单字段和多字段搜索、easyui入门
- Lucene 快速入门
- lucene入门简单实现
- lucene4.10.2入门