Lucene的一个简单的标准测试(Lucene包基于3.5版本的)

2024-06-23 18:38

本文主要是介绍Lucene的一个简单的标准测试(Lucene包基于3.5版本的),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lucene编程一般分为:索引、分词、搜索

索引源代码:

package lucene的一个标准测试;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;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;
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;public class TextFileIndexer {public static void main(String[] args) throws Exception {// 需要索引的源文件位置File fileDir = new File("E:\\Lucene\\source");// 存放索引的文件位置File indexDir = new File("E:\\Lucene\\index");// 把索引建立在硬盘中Directory dir = FSDirectory.open(indexDir);// 建立一个标准分词器Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_35);//IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,luceneAnalyzer);// 每次执行都是创建新的索引而不是追加索引iwc.setOpenMode(OpenMode.CREATE);// 创建一个索引器IndexWriter indexWriter = new IndexWriter(dir, iwc);// 保存源文件的多个文件到数组File[]中File[] textFiles = fileDir.listFiles();// 索引的开始时间long startTime = new Date().getTime();// for循环遍历源目录下的文件for (int i = 0; i < textFiles.length; i++) {if (textFiles[i].isFile()&& textFiles[i].getName().endsWith(".txt")) { // 获取相对路径???System.out.println("文件" + textFiles[i].getCanonicalPath()+ "正在被索引...");// 调用自定义读取文件内容的方法FileReaderAll()String temp = FileReaderAll(textFiles[i].getCanonicalPath(),"GBK");// 打印读取到的内容System.out.println(temp);// 为每一个文件的索引信息建立一个document对象Document document = new Document();// 文件路径索引:只是存储 不建立路径的索引,因为我们不需要对路径进行查询Field fieldPath = new Field("path", textFiles[i].getPath(),Field.Store.YES, Field.Index.NO);// 文件内容索引:Field fieldBody = new Field("body", temp, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS);// 添加各域到document文档对象中document.add(fieldPath);document.add(fieldBody);// 将文档写入索引indexWriter.addDocument(document);}}// 关闭indexWriter.close();// 测试一下索引时间long endTime = new Date().getTime();//getPath,getAbsolutePath,getCanonicalPath的区别参考转载的文章System.out.println("用时:" + (endTime - startTime) + "毫秒来把文档增加到索引里面去,"+fileDir.getPath());System.out.println("用时:" + (endTime - startTime) + "毫秒来把文档增加到索引里面去,"+fileDir.getAbsolutePath());System.out.println("用时:" + (endTime - startTime) + "毫秒来把文档增加到索引里面去,"+fileDir.getCanonicalPath());}// 自定义读取文件内容的方法 FileReaderAll()public static String FileReaderAll(String FileName, String charset)throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(FileName), charset));//知制定读取文件方式charset:GBKString line = new String();String temp = new String();while ((line = reader.readLine()) != null) {temp += line;}reader.close();return temp;}}

搜索源代码:

package lucene的一个标准测试;import java.io.File;
import java.io.IOException;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
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.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;public class TestQuery {public static void main(String[] args) throws IOException,ParseException{//搜索的索引路径String index = "E:\\index";IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)));//定义在索引库中进行查询的searcherIndexSearcher searcher = new IndexSearcher(reader);ScoreDoc[] hits = null;//检索词String queryString="绝对秋香";//声明query对象Query query = null;//分词器Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);try {QueryParser qp = new QueryParser(Version.LUCENE_35,"body",analyzer);query = qp.parse(queryString);} catch (ParseException e) {e.printStackTrace();}if(searcher!=null){TopDocs results = searcher.search(query, 10);hits = results.scoreDocs;if(hits.length>0){System.out.println("找到hits.length="+hits.length+"个结果\n"+"找到results.totalHits="+results.totalHits);}searcher.close();}}}


这篇关于Lucene的一个简单的标准测试(Lucene包基于3.5版本的)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1087963

相关文章

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Java版本不兼容问题详细解决方案步骤

《Java版本不兼容问题详细解决方案步骤》:本文主要介绍Java版本不兼容问题解决的相关资料,详细分析了问题原因,并提供了解决方案,包括统一JDK版本、修改项目配置和清理旧版本残留等步骤,需要的朋... 目录错误原因分析解决方案步骤第一步:统一 JDK 版本第二步:修改项目配置第三步:清理旧版本残留兼容性对

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

springboot集成Lucene的详细指南

《springboot集成Lucene的详细指南》这篇文章主要为大家详细介绍了springboot集成Lucene的详细指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起... 目录添加依赖创建配置类创建实体类创建索引服务类创建搜索服务类创建控制器类使用示例以下是 Spring

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经