核心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

lucene 索引 demo的更多相关文章

  1. MySQL和Lucene索引对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过 ...

  2. Lucene索引文件学习

     最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...

  3. lucene索引

    一.lucene索引 1.文档层次结构 索引(Index):一个索引放在一个文件夹中: 段(Segment):一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能产生新段,不同的段可以合并成一 ...

  4. lucene 索引合并策略

    在索引算法确定的情况下,最为影响Lucene索引速度有三个参数--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB .这些参数无非是控制 ...

  5. Lucene学习笔记: 四,Lucene索引过程分析

    对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...

  6. Lucene 索引功能

    Lucene 数据建模 基本概念 文档(doc): 文档是 Lucene 索引和搜索的原子单元,文档是一个包含多个域的容器. 域(field): 域包含“真正的”被搜索的内容,每一个域都有一个标识名称 ...

  7. Lucene学习总结之四:Lucene索引过程分析

    对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...

  8. lucene 索引查看工具

    luke 是 lucene 索引查看工具,基于 swing 开发的,是 lucene.solr.nutch 开发过程中不可或缺的工具.在测试搜索过程,进程出现搜不到东西或者搜到的东西不是想要的结果时, ...

  9. 深入Lucene索引机制

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

随机推荐

  1. Java网络编程之流——流、过滤器、阅读器和书写器

    Java的I/O建立于流(Stream)之上.输入流读取数据:输出流写入数据.所有的输出流都有相同的基本方法来写入数据,所有输入流也使用相同的基本方法来读取数据.在创建流之后,你通常可以忽略在读写时的 ...

  2. gradle基础的build文件模板_tomcat

    group '组织名' version '版本号' /* 支持的插件 */ apply plugin: 'java' // 项目基础变成语言支持为java apply plugin: 'war' // ...

  3. WPF中弹出文件夹浏览对话框

    附一个共享目录正则表达式判断: bool result= System.Text.RegularExpressions.Regex.IsMatch("\\pc-test\share" ...

  4. Linux中可用于管道操作的命令总结

    在Linux中药进行稍复杂的操作,通常需要借助管道命令"|"多个命令的组合,形式如下: command 1 |  command 2 |  command 3 -- 在linux中 ...

  5. 开发Windows Phone应用程序之后的感觉

    刚刚历时一个多月完成了酒美网(我之前的公司)Windows Phone版客户端,发现自己的自学能力还可以,但是还是有好多东西摸不清,到今天我才刚刚对MVVM入门,更对MVVMLight这个框架有进一步 ...

  6. (转)学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  7. http 中定义的八种请求的介绍

    在http1.1协议中,共定义了8种可以向服务器发起的请求(这些请求也叫做方法或动作),本文对这八种请求做出简要的介绍: 1.PUT:put的本义是推送 这个请求的含义就是推送某个资源到服务器,相当于 ...

  8. Oracle数据库学习笔记

    创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from ...

  9. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  10. PHP基础班初学心得:用JQ实现表单的全选、反选、取消和删除功能

    摘要: 本人刚参加PHP基础班培训,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. ...