核心util

/**
* Alipay.com Inc.
* Copyright (c) 2004-2015 All Rights Reserved/
*/
package com.lucene.demo; import com.demo.convertor.BookConvertor;
import com.demo.domain.BookDO; import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
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.util.Version; import java.io.IOException; /**
* 索引操作工具
*
* @author baoxing.gbx
* @version $Id:IndexUtil.java, V 0.1 2015-11-15 14:23 baoxing.gbx Exp $$
*/
public class IndexUtil extends BaseUtil { /**
* 创建索引
*/
public static void creatIndex() throws Exception { try {
// 循环添加书
for (int i = 1; i <= 2; ++i) { BookDO bookDO = new BookDO();
bookDO.setId(i);
bookDO.setAuthor("zhangsan" + i);
bookDO.setName("Java program" + i);
bookDO.setContent("Java是一种可以撰写跨平台应用程序的面向对象的程序设计开发语言");
addDoc(bookDO);
} for (int i = 3; i <= 4; ++i) {
BookDO bookDO = new BookDO();
bookDO.setId(i);
bookDO.setAuthor("lisi" + i);
bookDO.setName("Java program" + i);
bookDO.setContent(
"Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网");
addDoc(bookDO);
} for (int i = 5; i <= 6; ++i) {
BookDO bookDO = new BookDO();
bookDO.setId(i);
bookDO.setAuthor("wangwu" + i);
bookDO.setName("Java program" + i);
bookDO.setContent("同时拥有全球最大的开发者专业社");
addDoc(bookDO);
} for (int i = 7; i <= 8; ++i) { BookDO bookDO = new BookDO();
bookDO.setId(i);
bookDO.setAuthor("xiaoming" + i);
bookDO.setName("C++ program" + i);
bookDO.setContent("C++是在C语言的基础上开发的一种面向对象编程语言");
addDoc(bookDO);
}
} catch (Exception e) {
logger.equals("索引创建失败:" + e.getMessage());
throw e;
}
} /**
* 删除索引
*/
public static void deleteIndex() throws Exception { try {
Term term = new Term("id", 1 + ""); IndexWriter indexWriter = getIndexWriter(); indexWriter.deleteDocuments(term);
indexWriter.commit();
} catch (Exception e) {
logger.error("删除索引失败");
throw e;
} } /**
* 删除索引
*/
public static void deleteAllIndex() throws Exception {
try {
getIndexWriter().deleteAll();
getIndexWriter().commit(); } catch (IOException e) { logger.equals("索引删除失败:" + e.getMessage());
throw e;
}
} /**
* 删除索引
*/
public static void updateIndex() throws Exception {
Term term = new Term("id", 1 + "");
BookDO bookDO = new BookDO();
bookDO.setId(1);
bookDO.setAuthor("zhangsan" + 1);
bookDO.setName("Java program" + 1);
bookDO.setContent("Java"); try {
getIndexWriter().updateDocument(term, BookConvertor.convert2Doc(bookDO));
getIndexWriter().commit();
} catch (IOException e) {
logger.equals("索引更新失败:" + e.getMessage());
throw e;
}
} /**
* 模拟数据库添加,同时添加索引
*
* @param bookDO
* @throws IOException
*/
private static void addDoc(BookDO bookDO) throws IOException { // 数据库操作
dataBase.put(bookDO.getId() + "", bookDO);
// 索引操作
Document document = BookConvertor.convert2Doc(bookDO);
getIndexWriter().addDocument(document);
// 必须提交否则不奏效
getIndexWriter().commit();
} /**
* 检索
*
* @param keyword
*/
public static void search(String keyword) throws Exception { IndexSearcher searcher = null; try {
// 创建search
searcher = getIndexSearcher(); String[] fields = { "name", "author", "content" };
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_35, fields,
new StandardAnalyzer(Version.LUCENE_35));
queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
Query query = queryParser.parse(keyword); // 查询
TopDocs topDocs = searcher.search(query, MAX); ScoreDoc[] scoreDocs = topDocs.scoreDocs;
logger.info("查询到条数=" + scoreDocs.length); for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
logger.info("doc信息:" + "docId=" + scoreDoc.doc + "id=" + doc.get("id") + "author="
+ doc.get("author") + "name=" + doc.get("name") + "content="
+ doc.get("content"));
} } catch (Exception e) {
logger.error("查询失败:" + e.getMessage());
throw e;
}
} public static void numDocs() throws IOException {
IndexReader indexReader = getIndexReader();
logger.info("已删除的数量" + indexReader.numDeletedDocs());
logger.info("numDocs" + indexReader.numDocs());
logger.info("maxDoc" + indexReader.maxDoc());
} }

  

测试

/**
* Alipay.com Inc.
* Copyright (c) 2004-2015 All Rights Reserved/
*/
package com.demo; import com.lucene.demo.IndexUtil; import org.junit.Test; import junit.framework.TestCase; import java.io.IOException; /**
*
* @author baoxing.gbx
* @version $Id:IndexUtilTest.java, V 0.1 2015-11-15 14:49 baoxing.gbx Exp $$
*/
public class IndexUtilTest extends TestCase { @Override
protected void setUp() throws Exception {
IndexUtil.creatIndex();
} /**
* 创建索引
*
*/
@Test
public void testCreate() { try {
IndexUtil.creatIndex();
} catch (Exception e) {
assertTrue(e.getMessage(), false);
}
} /**
* 删除索引
*/
@Test
public void testDelete() { try {
IndexUtil.search("Java");
IndexUtil.numDocs(); IndexUtil.deleteIndex(); IndexUtil.search("Java");
IndexUtil.numDocs();
} catch (Exception e) {
assertTrue(e.getMessage(), false);
}
} /**
* 删除索引
*/
@Test
public void testDeleteAll() { try { IndexUtil.search("Java");
IndexUtil.numDocs(); IndexUtil.deleteAllIndex(); IndexUtil.search("Java");
IndexUtil.numDocs();
} catch (Exception e) {
assertTrue(e.getMessage(), false);
} } /**
* 删除索引
*/
@Test
public void testSearch() throws Exception { try { IndexUtil.search("Java");
IndexUtil.numDocs(); } catch (Exception e) {
assertTrue(e.getMessage(), false);
} } @Test
public void testNuns() throws Exception { try { IndexUtil.numDocs(); } catch (IOException e) {
assertTrue(e.getMessage(), false);
}
} /**
* 更新
*
* @throws Exception
*/
@Test
public static void testUpdate() throws Exception { try { IndexUtil.numDocs();
IndexUtil.search("Java"); IndexUtil.updateIndex(); System.out.println("更新完毕"); IndexUtil.numDocs();
IndexUtil.search("Java"); } catch (IOException e) {
assertTrue(e.getMessage(), false);
}
}
}

  

git代码地址: https://github.com/EstarG/lucenceDemo

最新文章

  1. 提额 APP
  2. internet connection sharing has been disabled by the network administrator
  3. 【ZZ】 DShader之位移贴图(Displacement Mapping)
  4. switch为什么不能用string类型?
  5. Android ListView标题置顶效果实现
  6. Linux批量杀进程
  7. epub3 in action: epub3文件格式简介
  8. DiscreteSeekBar使用简介,一个带气泡的SeekBar
  9. 「python」: arp脚本的两种方法
  10. &lt;c:if&gt;判断两个&lt;c:forEach&gt;里的数据是否相等
  11. ctf常见php弱类型分析
  12. EasyUI 中 Combobox里的onChange和onSelect事件的区别
  13. A. Chess Placing
  14. ansible小结常用模块
  15. ARM与X86 CPU架构对比区别
  16. localhost 和 127.0.0.1 有什么区别?
  17. Solr记录-solr内核与索引
  18. sublime sftp 打开远程文件夹
  19. Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
  20. 转载:R语言rvest包使用

热门文章

  1. post- build event
  2. fopen,fread和fwrite
  3. Application Engine
  4. Javascript-9-1-OOP-5-链式调用
  5. linux搭建微型git服务器
  6. Excel应该这么玩——7、我是预言家:绘制趋势图
  7. 如何设置ASP.NET页面的运行超时时间 (转载)
  8. django中文配置的问题
  9. Vim命令合集大全
  10. Attribute和自定义Property