最近在学习lucene,参考网上的资料写了一个简单搜索demo;

项目jar包:

//索引关键类


<pre name="code" class="java">package com.lucene.index;import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
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.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.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;import com.lucene.vo.User;/***  * lucene 检索内存索引 非常简单的例子  *  * @author Administrator  *  */
public class searchIndex {private String[] ids = { "1", "2", "3", "4", "5", "6" };private String[] emails = { "aa@itat.org", "bb@itat.org", "cc@cc.org", "dd@sina.org", "ee@zttc.edu", "ff@itat.org" };
//  private String[] contents = { "welcome to visited the space,I like book", "hello boy, I like pingpeng ball", "my name is cc I like game", "I like football",
//          "I like football and I like basketball too", "I like movie and swim" };private String[] contents = { "创建一个内存目录对象,所以这里生成的索引会放在磁盘中,而不是在内存中", "创建索引写入对象,该对象既可以把索引写入到磁盘中也可以写入到内存中", "分词器,分词器就是将检索的关键字分割成一组组词组, 它是lucene检索查询的一大特色之一", "这个是分词器拆分最大长度,因为各种不同类型的分词器拆分的字符颗粒细化程度不一样,所以需要设置一个最长的拆分长度","文档对象,在lucene中创建的索引可以看成数据库中的一张表,表中也可以有字段,往里面添加内容之后可以根据字段去匹配查询", "I like movie and swim" };private String[] names = { "zhangsan", "lisi", "john", "jetty", "mike", "jake" };// 创建一个内存目录对象,所以这里生成的索引会放在磁盘中,而不是在内存中。private Directory directory = null;//IK分词器IKAnalyzer analyzer = null;public searchIndex() {try {directory = FSDirectory.open(new File("H:/lucene/index"));analyzer = new IKAnalyzer(true);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void index() {/** 创建索引写入对象,该对象既可以把索引写入到磁盘中也可以写入到内存中。*/IndexWriter writer;try {writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36, analyzer));//创建之前先删除writer.deleteAll();// 创建Document// 文档对象,在lucene中创建的索引可以看成数据库中的一张表,表中也可以有字段,往里面添加内容之后可以根据字段去匹配查询Document doc =null;for(int i=0;i<ids.length;i++){doc = new Document();doc.add(new Field("id", ids[i], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));doc.add(new Field("email", emails[i], Field.Store.YES, Field.Index.NOT_ANALYZED));doc.add(new Field("content", contents[i], Field.Store.NO, Field.Index.ANALYZED));doc.add(new Field("name", names[i], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));writer.addDocument(doc);}writer.close(); } catch (CorruptIndexException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (LockObtainFailedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public List<User> search(String keyword) {long startTime = System.currentTimeMillis();System.out.println("*****************检索开始**********************");List<User> userList = new ArrayList<User>();IndexReader reader;try {reader = IndexReader.open(directory);// 创建IndexSearcher 检索索引的对象,里面要传递上面写入的内存目录对象directoryIndexSearcher searcher = new IndexSearcher(reader);// 根据搜索关键字 封装一个term组合对象,然后封装成Query查询对象QueryParser queryParser = new QueryParser(Version.LUCENE_36, "content", analyzer);Query query = queryParser.parse(keyword);// 去索引目录中查询,返回的是TopDocs对象,里面存放的就是上面放的document文档对象TopDocs rs = searcher.search(query, null, 10);long endTime = System.currentTimeMillis();System.out.println("总共花费" + (endTime - startTime) + "毫秒,检索到" + rs.totalHits + "条记录。");User user = null;for (int i = 0; i < rs.scoreDocs.length; i++) {// rs.scoreDocs[i].doc 是获取索引中的标志位id, 从0开始记录Document firstHit = searcher.doc(rs.scoreDocs[i].doc);user = new User();user.setId(Long.parseLong(firstHit.get("id")));user.setName(firstHit.get("name"));user.setSex(firstHit.get("sex"));user.setDosomething(firstHit.get("dosometing"));user.setEmail(firstHit.get("email"));user.setContent(firstHit.get("content"));userList.add(user);//             System.out.println("name:" + firstHit.get("name"));
//              System.out.println("sex:" + firstHit.get("sex"));
//              System.out.println("dosomething:" + firstHit.get("dosometing"));}reader.close();} catch (CorruptIndexException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("*****************检索结束**********************");return userList;}}
package com.lucene;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.lucene.index.searchIndex;
import com.lucene.vo.User;/*** Servlet implementation class searchServlet*/
public class searchServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** Default constructor. */public searchServlet() {// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String keyword = request.getParameter("keyword");if("".equals(keyword)){keyword="0";}searchIndex si = new searchIndex();si.index();List<User> userList = si.search(keyword);request.setAttribute("userList", userList);request.getRequestDispatcher("search.jsp").forward(request, response);}}
package com.lucene.vo;public class User {private Long id;private String name;private String sex;private String dosomething;private String email;private String content;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getDosomething() {return dosomething;}public void setDosomething(String dosomething) {this.dosomething = dosomething;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>lucene 全文检索</title>
</head>
<body style="text-align: center;"><form action="searchServlet.do" method="post"><input type="text" name="keyword" /> <input type="submit" value="搜索" /></form><div style="height: 10px"></div><c:if test="${not empty userList}"><div>相关信息:</div><table border="1" align="center"><tr><td>ID</td><td>姓名</td><td>性别</td><td>邮箱</td><td>爱好</td><td>正文</td></tr><c:forEach items="${ userList}" var="user"><tr><td>${user.id }</td><td>${user.name }</td><td>${user.sex }</td><td>${user.email }</td><td>${user.dosomething }</td><td>${user.content }</td></tr></c:forEach></table></c:if>
</body>
</html>

代码测试:

Lucene创建索引入门案例相关推荐

  1. lucene创建索引_Lucene概述第一部分:创建索引

    lucene创建索引 介绍 我最近一直在与开源搜索引擎Lucene合作 . 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总 ...

  2. 【示例】Lucene创建索引库编程步骤

    [示例]Lucene创建索引库编程步骤

  3. lucene创建索引时出错:扑捉到FileNotFoundException

    lucene创建索引文件出错,如下图: 解决方案: 解锁即可 代码如下: bool isUpdate = IndexReader.IndexExists(directory);if (isUpdate ...

  4. 搜索引擎学习(二)Lucene创建索引

    PS:需要用到的jar包: 代码实现 1.工程结构 2.设置工程依赖的jar包 3.代码实现 /*** Lucene入门* 创建索引*/ public class CreateIndex {/*** ...

  5. lucene创建索引

    1.导入jar包 2.创建实体Bean package com.zhishang.lucene;/*** Created by Administrator on 2017/7/8.*/ public ...

  6. lucene 创建索引慢的问题

    网上随便一搜都能搜到很多关于lucene的教程,这里就不细展开了.简单说下过程: IndexWriterConfig indexWriterConfig = new IndexWriterConfig ...

  7. mysql创建索引小案例

    1 需要创建的表如下 2 要求如下 3 实现 (2) user表代码如下 CREATE TABLE USER(userid INT(10) NOT NULL UNIQUE PRIMARY KEY AU ...

  8. SpringBoot创建项目入门案例

    目录结构 一.创建SpringBoot项目 1.创建骨架名称 2.给项目命名 3.配置pom.xml文件 4.MySql的驱动包 5.自动生成的pom.xml文件 <?xml version=& ...

  9. Lucene概述第一部分:创建索引

    介绍 我最近一直在与开源搜索引擎Lucene合作 . 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总体上很清楚. Luce ...

最新文章

  1. 23个MySQL常用查询语句
  2. java的线程管理器,QuickThread - Java线程池管理器
  3. abp angular 和mvc_使用.net core ABP和Angular模板构建博客管理系统(实现自己的业务逻辑)...
  4. 【转载】PHP报错分析(Corrupted encoded data detected in)
  5. vue 改变domclass_手机上的大片制作软件——如何使用VUE
  6. 一个人如果没有计划,那和咸鱼有什么区别!
  7. oracle 报错3113,内存不足导致安装时报错ORA-3113(一)
  8. 生成的url无法显示_快速生成PDF文档~~
  9. vRealize Operations Manager 安装部署
  10. 切线理论-支撑位与阻力位
  11. Oracle 查看表空间的使用情况SQL语句
  12. Hadoop集群配置(二)免密登录和集群配置
  13. Win7安装msu文件失败引发的一系列问题
  14. db2导出适用于mysql的数据_db2数据库导出导入数据库
  15. 六月申城如约而至,2021上海空气新风展邀您共襄行业盛举
  16. 怎么隐藏鼠标箭头_立刻上手,无鼠标高效操作excel指南(一)
  17. MIUI9系统详细刷成开发版启用root权限的教程
  18. Linux学习——vi/vim编辑C程序并运行
  19. vue2 通过 axios  访问koa2,从mysql 拿到数据更新vue2中的内容
  20. 首届实时渲染3D动画创作大赛结果公布,看大奖英伟达A6000花落谁家

热门文章

  1. HTTPS配置全记录
  2. 商城项目:装nginx时碰到的各种问题
  3. 编码之道:取个好名字很重要(转)
  4. Oracle命令(二):Oracle数据库几种启动和关闭方式
  5. 【RIA Services】系统分析
  6. android 运行jar包,android将so打到jar包中并运行-Go语言中文社区
  7. python flask源码解析_浅谈flask源码之请求过程
  8. python读取图片上的文字_Python帮你读取图片中的文字(OCR)
  9. android9系统webview崩溃,Android WebView已开始在Android 9上崩溃
  10. 增加数组下标_数组以及ArrayList源码解析