1.2 lucene入门程序环境搭建及入门代码

 lucene入门程序环境搭建及入门代码

1.1      需求

使用lucene完成对数据库中图书信息的索引和搜索功能。

1.2      环境准备

l  Jdk:1.7及以上

l  Lucene:4.10(从4.8版本以后,必须使用jdk1.7及以上)

l  Ide:indigo

l  数据库:mysql 5

1.3      工程搭建

l  Mysql驱动包

l  Analysis的包

l  Core包

l  QueryParser包

l  Junit包(非必须)

  1. 创建po类

     1 public class Book {
     2     // 图书ID
     3     private Integer id;
     4     // 图书名称
     5     private String name;
     6     // 图书价格
     7     private Float price;
     8     // 图书图片
     9     private String pic;
    10     // 图书描述
    11     private String description;
    12     public Integer getId() {
    13         return id;
    14     }
    15     public void setId(Integer id) {
    16         this.id = id;
    17     }
    18     public String getName() {
    19         return name;
    20     }
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24     public Float getPrice() {
    25         return price;
    26     }
    27     public void setPrice(Float price) {
    28         this.price = price;
    29     }
    30     public String getPic() {
    31         return pic;
    32     }
    33     public void setPic(String pic) {
    34         this.pic = pic;
    35     }
    36     public String getDescription() {
    37         return description;
    38     }
    39     public void setDescription(String description) {
    40         this.description = description;
    41     }
    42
    43 }

    创建po类

  2. DAO


     1 publicclass BookDaoImpl implements BookDao {
     2
     3     @Override
     4     public List<Book> queryBooks() {
     5         // 数据库链接
     6         Connection connection = null;
     7
     8         // 预编译statement
     9         PreparedStatement preparedStatement = null;
    10
    11         // 结果集
    12         ResultSet resultSet = null;
    13
    14         // 图书列表
    15         List<Book> list = new ArrayList<Book>();
    16
    17         try {
    18             // 加载数据库驱动
    19             Class.forName("com.mysql.jdbc.Driver");
    20             // 连接数据库
    21             connection = DriverManager.getConnection(
    22                     "jdbc:mysql://localhost:3306/solr", "root", "root");
    23
    24             // SQL语句
    25             String sql = "SELECT * FROM book";
    26             // 创建preparedStatement
    27             preparedStatement = connection.prepareStatement(sql);
    28
    29             // 获取结果集
    30             resultSet = preparedStatement.executeQuery();
    31
    32             // 结果集解析
    33             while (resultSet.next()) {
    34                 Book book = newBook();
    35                 book.setId(resultSet.getInt("id"));
    36                 book.setName(resultSet.getString("name"));
    37                 book.setPrice(resultSet.getFloat("price"));
    38                 book.setPic(resultSet.getString("pic"));
    39                 book.setDescription(resultSet.getString("description"));
    40                 list.add(book);
    41             }
    42
    43         } catch (Exception e) {
    44             e.printStackTrace();
    45         }
    46
    47         return list;
    48     }
    49
    50 }

    DAO实现类

  3. 创建索引

    创建索引流程:

    IndexWriter是索引过程的核心组件,通过IndexWriter可以创建新索引、更新索引、删除索引操作。IndexWriter需要通过Directory对索引进行存储操作。

    Directory描述了索引的存储位置,底层封装了I/O操作,负责对索引进行存储。它是一个抽象类,它的子类常用的包括FSDirectory(在文件系统存储索引)、RAMDirectory(在内存存储索引)。

     1 @Test
     2     publicvoidcreateIndex() throws Exception {
     3         // 采集数据
     4         BookDao dao = new BookDaoImpl();
     5         List<Book> list = dao.queryBooks();
     6
     7         // 将采集到的数据封装到Document对象中
     8         List<Document> docList = new ArrayList<>();
     9         Document document;
    10         for (Book book : list) {
    11             document = new Document();
    12             // store:如果是yes,则说明存储到文档域中
    13             // 图书ID
    14             Field id = new TextField("id", book.getId().toString(), Store.YES);
    15             // 图书名称
    16             Field name = new TextField("name", book.getName(), Store.YES);
    17             // 图书价格
    18             Field price = new TextField("price", book.getPrice().toString(),
    19                     Store.YES);
    20             // 图书图片地址
    21             Field pic = new TextField("pic", book.getPic(), Store.YES);
    22             // 图书描述
    23             Field description = new TextField("description",
    24                     book.getDescription(), Store.YES);
    25
    26             // 将field域设置到Document对象中
    27             document.add(id);
    28             document.add(name);
    29             document.add(price);
    30             document.add(pic);
    31             document.add(description);
    32
    33             docList.add(document);
    34         }
    35
    36         // 创建分词器,标准分词器
    37         Analyzer analyzer = new StandardAnalyzer();
    38
    39         // 创建IndexWriter
    40         IndexWriterConfig cfg = new IndexWriterConfig(Version.LUCENE_4_10_3,
    41                 analyzer);
    42         // 指定索引库的地址
    43         File indexFile = new File("E:\\11-index\\hm19\\");
    44         Directory directory = FSDirectory.open(indexFile);
    45         IndexWriter writer = new IndexWriter(directory, cfg);
    46
    47         // 通过IndexWriter对象将Document写入到索引库中
    48         for (Document doc : docList) {
    49             writer.addDocument(doc);
    50         }
    51
    52         // 关闭writer
    53         writer.close();
    54     }

    创建索引

  4. 分词
    Lucene中分词主要分为两个步骤:分词、过滤

    分词:将field域中的内容一个个的分词。
    过滤:将分好的词进行过滤,比如去掉标点符号、大写转小写、词的型还原(复数转单数、过去式转成现在式)、停用词过滤

    停用词:单独应用没有特殊意义的词。比如的、啊、等,英文中的this is a the等等。

  5. 搜索

     1 @Test
     2     publicvoid indexSearch() throws Exception {
     3         // 创建query对象
     4         // 使用QueryParser搜索时,需要指定分词器,搜索时的分词器要和索引时的分词器一致
     5         // 第一个参数:默认搜索的域的名称
     6         QueryParser parser = new QueryParser("description",
     7                 new StandardAnalyzer());
     8
     9         // 通过queryparser来创建query对象
    10         // 参数:输入的lucene的查询语句(关键字一定要大写)
    11         Query query = parser.parse("description:java AND lucene");
    12
    13         // 创建IndexSearcher
    14         // 指定索引库的地址
    15         File indexFile = new File("E:\\11-index\\hm19\\");
    16         Directory directory = FSDirectory.open(indexFile);
    17         IndexReader reader = DirectoryReader.open(directory);
    18         IndexSearcher searcher = new IndexSearcher(reader);
    19
    20         // 通过searcher来搜索索引库
    21         // 第二个参数:指定需要显示的顶部记录的N条
    22         TopDocs topDocs = searcher.search(query, 10);
    23
    24         // 根据查询条件匹配出的记录总数
    25         int count = topDocs.totalHits;
    26         System.out.println("匹配出的记录总数:" + count);
    27         // 根据查询条件匹配出的记录
    28         ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    29
    30         for (ScoreDoc scoreDoc : scoreDocs) {
    31             // 获取文档的ID
    32             int docId = scoreDoc.doc;
    33
    34             // 通过ID获取文档
    35             Document doc = searcher.doc(docId);
    36             System.out.println("商品ID:" + doc.get("id"));
    37             System.out.println("商品名称:" + doc.get("name"));
    38             System.out.println("商品价格:" + doc.get("price"));
    39             System.out.println("商品图片地址:" + doc.get("pic"));
    40             System.out.println("==========================");
    41             // System.out.println("商品描述:" + doc.get("description"));
    42         }
    43         // 关闭资源
    44         reader.close();
    45     }

时间: 2024-08-04 18:02:30

1.2 lucene入门程序环境搭建及入门代码的相关文章

scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld

IDE选择并下载: scala for eclipse 下载: http://scala-ide.org/download/sdk.html 根据自己的机器配置选择合适的IDE: 我这里选择For scala2.11 版本的Windows 32 bit的IDE,单击即下载. scala安装: 安装包下载地址,进入官网:http://www.scala-lang.org/ 进入DOWNLOAD下,选择scala 2.11 版本,单击下载: Windows上安装scala 2.11: 单击运行sca

Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附详细代码] 标签: SparkECLIPSEJAVAMAVENwindows 2016-06-18 22:35 405人阅读 评论(0) 收藏 举报  分类: spark(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 本文旨在记录初学Spark时,根据官网快速

win7+Myeclipse10开发Hadoop应用程序环境搭建

1.复制linux下已配置安装好的hadoop目录进入windows, 同时修改hadoo-env.sh文件的JAVA_HOME为windows下的jdk目录. 2.复制hadoop-eclipse-1.2.jar插件进入myeclipse文件夹下dropins下 下载:我的文件下有一个以hadoop-eclipse1.2.rar文件(压缩包),下载下来,将后缀改为jar就可以了 3.重启myeclipse 4.配置:windows-Preference->windows下的hadoop目录 5

Selenium2(webdirver)入门之环境搭建(Java版)

Selenium2(webdirver)入门之环境搭建(Java版) 一.开发环境: 1.JDK1.6 2.Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downloads/ 3.Selenium:selenium-java-2.52.0.zip,下载地址:http://docs.seleniumhq.org/download/ 解压selenium-java包,这个包里面包含四部分,如下图: 二.新建

新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布

Vue2.0 新手入门 - 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就写下使用总结 1. Vue2.0 推荐开发环境中一些安装就不说了 Node.js  .npm  .webpack  .vue-cli  , 自己看着安装 到最后能启动本地通过 vue-cli 建的项目,  npm run dev  ,默认的 http://localhost:8080/ 能看到页面显

iOS开发——实战OC篇&amp;环境搭建之纯代码(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleView Controller,命名未iCocos 二:由于我们使用的纯代码实现的,所以删除其中的StoryBoard和Viewtroller的两个文件 三:新建一个继承自TabBar Controller的类,我们命名问iCocos ViewController 三:在Appdelegate的实现文件中导入刚刚

JAVA WEB快速入门之环境搭建

前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得顺应潮流,” 精通 “ JAVA  ^ v ^,当然.NET CORE也是我同步学习与研究的方向,甚至还有PYTHON,活到老学到老. JAVA我之前也涉猎过一些,也看过一些JAVA代码,但并没有系统的学习及深入的了解JAVA WEB框架及底层原理,我准备借此机会,由基础到入门到熟练,由浅入深的全面

[精华]springMVC环境搭建基础入门总汇!

1.SpringMVC概述 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring       FrameWork 的后续产品,已经融合在 Spring Web Flow 里面.Spring 框架提供了构建 Web 应用程序的全功 能 MVC 模块.使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 Spring MVC 框架或集成其他 MVC 开发框架,如

Angular2 快速入门 之 环境搭建

2015.10.14更新:本文的内容已经过期了,Angular2现在已经完全基于TypeScript开发了,可以移步https://github.com/flyingzl/angular2-seed 查看最新代码. 一.题记 写这篇文章呢,主要是想帮助那些想尝鲜Angular2的童鞋们,因为我自己在玩Angular2时碰到了不少坑,而且Angular2语法一直处于变化中,让人很头疼.不过也怪不了Anguar2,因为它现在是处于并长期处于alpha阶段,本文是基于最新的angular2.0.0-a