热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene4.3.1实现索引创建和索引检索

作为全文检索的的工具包——Lucene,自诞生后就备受瞩目。但由于版本更新较快,新版本稳定不佳,因此我还是选择4.3.x系列的稳定版本作为

作为全文检索的的工具包——Lucene,自诞生后就备受瞩目。但由于版本更新较快,新版本稳定不佳,因此我还是选择4.3.x系列的稳定版本作为练习之用。索引创建和索引检索的代码如下所示:

一、首先工程得导入lucene依赖的各个jar包,以免报错。


二、索引创建

package com.test.lucene;import java.io.File;
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.Store;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;/**
* Filename: IndexCreat.java
* Copyright: Copyright (c)2010
* Company: com
* @version: 1.0
* @since: JDK 1.6.0_21
* Create at: 2016年6月3日 上午12:04:10
* Description: Create Index
*
* Modification History:
* Date Author Version Description
* -----------------------------------------------------------------
* 2016年6月3日 Kevin-YE 1.0 1.0 Version
**/
public class IndexCreat {public static void main(String[] args) {Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43); //standard AnalyzerIndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_43, analyzer);indexWriterConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);//set index open modeDirectory directory = null; //Index storageIndexWriter indexWriter = null;try {directory = FSDirectory.open(new File("F://index/Test"));if(indexWriter.isLocked(directory)){indexWriter.unlock(directory);}indexWriter = new IndexWriter(directory, indexWriterConfig);}catch(Exception e) {e.printStackTrace();}Document doc1 = new Document();doc1.add(new StringField("id", "akfjjf", Store.YES ));doc1.add(new TextField("content", "普天同庆", Store.YES ));doc1.add(new IntField("num", 1, Store.YES));try {indexWriter.addDocument(doc1);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Document doc2 = new Document();doc2.add(new StringField("id", "", Store.YES ));doc2.add(new TextField("content", "阳光普照", Store.YES ));doc2.add(new IntField("num", 2, Store.YES));try { //close resourceindexWriter.commit();indexWriter.close();directory.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

索引创建成功后,可在F盘下找到Index/Test目录。在这里,我们使用工具Luke4.3.1进行验证索引是否创建成功。请注意:Luke工具包要和Lucene工具包版本一致,否则会出现"read past eof"的错误。



三、索引检索

package com.test.lucene;import java.io.File;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.queryparser.classic.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.util.Version;/**
* Filename: IndexSearch.java
* Copyright: Copyright (c)2010
* Company: com
* @version: 1.0
* @since: JDK 1.6.0_21
* Create at: 2016年6月3日 下午10:38:57
* Description: Index search
*
* Modification History:
* Date Author Version Description
* -----------------------------------------------------------------
* 2016年6月3日 Kevin-Ye 1.0 1.0 Version
**/
public class IndexSearch {public static void main(String[] args) {Directory directory = null;try {directory = FSDirectory.open(new File("F://Index/Test"));DirectoryReader dReader = DirectoryReader.open(directory); // read index fileIndexSearcher indexSearcher = new IndexSearcher(dReader); // create index objectAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);QueryParser parser = new QueryParser(Version.LUCENE_43, "content",analyzer); //set index query stringQuery query = parser.parse("普天同庆");TopDocs topDocs = indexSearcher.search(query, 10);if(topDocs != null) {System.out.println("查询到符合文档总数为:"+ topDocs.totalHits);for(int i = 0; i


运行结果如下所示:







推荐阅读
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
author-avatar
大盗哈喽小马甲_943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有