`

运用Luence建索和检索的方法

 
阅读更多

初学者   还在进步 勿批!

链接地址: http://2814704901.iteye.com/admin/blogs/1930415

建索:

import java.io.File;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

 

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.store.Directory;

import org.apache.lucene.store.FSDirectory;

 

import com.jpsycn.kfwggl.common.tools.GetRootPath;

import com.jpsycn.kfwggl.common.tools.HandlerSummary;

import com.jpsycn.kfwggl.system.entity.ResultGetInfo;

 

public class CreateIndex {

//抓取到的页面存放的路径

//String filesPath="F:/kfwlyqTxtList";

//分词

private Analyzer analyzer = new StandardAnalyzer();

public void createIndex(List<ResultGetInfo> lt){

Date d=new Date();

String root=GetRootPath.getIndexesPath();

if(!new File(root).exists()){

new File(root).mkdir();

}

//创建的索引存放路径

String INDEXPATH=root+new SimpleDateFormat("yyyyMMddHHMMSS").format(d)+d.getTime();

System.out.println(INDEXPATH);

if(!new File(INDEXPATH).exists()){

new File(INDEXPATH).mkdir();

}

//获取存放索引的文件夹

try {

SimpleDateFormat ft=new SimpleDateFormat("yyyy-MM-dd");

Directory directory = FSDirectory.getDirectory(INDEXPATH);

IndexWriter indexWriter = new IndexWriter(directory, analyzer ,true, IndexWriter.MaxFieldLength.LIMITED);

long begin = new Date().getTime();

for(ResultGetInfo rg:lt){

//获取一个List<esultGetInfo>遍历里面的值  建索    

//其中 红色titleResult 就是 索引 如字典中的索引  蓝色就是你要建索的字符串 

//Field.Store.YES 表示是否存储 以后可以检索  

//Field.Index.ANALYZED 表示是否分词

Document doc = new Document();

String titleResult=rg.getTitle()==null?"":rg.getTitleResult().trim();

String content =rg.getContent()==null?"":rg.getContent();

String link=rg.getLink()==null?"":rg.getLink().trim();

String releaseDate=rg.getReleaseDate()==null?"":ft.format(rg.getReleaseDate());

doc.add(new Field("titleResult", titleResult, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));

doc.add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));

doc.add(new Field("link", link, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.YES));

doc.add(new Field("releaseDate", releaseDate, Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.YES));

indexWriter.addDocument(doc);

}

long end = new Date().getTime();

System.out.println(">>> 1.存入索引完毕.. 共花费:" + (end - begin) +"毫秒...");

indexWriter.optimize();

indexWriter.close();

} catch (Exception e) {

e.printStackTrace();

}

 

}

}

 

检索:

import java.io.File;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.queryParser.MultiFieldQueryParser;

import org.apache.lucene.search.BooleanClause;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

 

public class GetResultInfo {

public static List<String> getResultInfos(String keyName,String INDEXPATH,String titleOrContent){

List<String> list=new ArrayList<String>();

Analyzer analyzer = new StandardAnalyzer();

//String titleResult="titleResult";

String link="link";

//String content=titleOrContent;

//String releaseDate="releaseDate";

//索引存放位置

try {

IndexSearcher indexSearcher = new IndexSearcher(INDEXPATH);

//System.out.println(">>> 2.开始读取索引... ... 通过关键字:【 "+ keyName +" 】");

 

BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD };

Query queryOBJ = MultiFieldQueryParser.parse(keyName, new String[]{titleOrContent}, clauses, analyzer);//parser.parse(query);

//Filter filter = null;

//################# 搜索相似度最高的记录 ###################

//TopDocs topDocs = indexSearcher.search(queryOBJ, filter, 1000);

TopDocs topDocs = indexSearcher.search(queryOBJ , 10000);

//System.out.println("*** 共匹配:" + topDocs.totalHits + "个 ***");

 

//ResultGetInfo rg = null;

 

//输出结果

for (ScoreDoc scoreDoc : topDocs.scoreDocs){

/*

* 这里我就返回一个List<String>集合 里面存放路径 url

                                 * 这里的link是需要和建索的时候的 link对应的 而且相同 

*/

Document targetDoc = indexSearcher.doc(scoreDoc.doc);

list.add(targetDoc.get(link).trim());

/*rg = new ResultGetInfo();

//注释掉的是关于高亮显示的部分  获取到的是含有html标签的字符串 需要你转换

//设置高亮显示格式

SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'><strong>", "</strong></font>"); 

/* 语法高亮显示设置 */

/*Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(queryOBJ)); 

highlighter.setTextFragmenter(new SimpleFragmenter(100)); 

// 设置高亮 设置 title,content 字段

/*String title = targetDoc.get("titleResult");

String contents = targetDoc.get("content");

TokenStream titleTokenStream = analyzer.tokenStream(titleResult,new StringReader(title));

TokenStream contentTokenStream = analyzer.tokenStream(content,new StringReader(contents));

String highLightTitle = highlighter.getBestFragment(titleTokenStream, title);

String highLightContent = highlighter.getBestFragment(contentTokenStream, contents);

 

    if(highLightTitle == null){

    highLightTitle = title;

    }

    if(highLightContent == null) {

    highLightContent = content;

    }

   rg.setLink(targetDoc.get(link));

   rg.setTitleResult(highLightTitle);

   rg.setContent(highLightContent);

   rg.setReleaseDate(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(targetDoc.get(releaseDate)+" 00:00:00"));

list.add(rg);*/

}

 

indexSearcher.close();

return list;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

//

public static List<String> getDirPath(String path){

List<String> dirPaths=new ArrayList<String>();

File f=new File(path);

File files[]=f.listFiles();

if(files.length==0){

System.out.println("没有存放索引的文件夹");

}else{

for(int i=0;i<files.length;i++){

//检索每个存放索引的文件夹

dirPaths.add(files[i].getAbsolutePath());

}

}

return dirPaths;

}

public static Map<String,String> getInfos(String path,String str[],String titleOrContent){

long begin = new Date().getTime();

Map<String,String> map=new HashMap<String,String>();

//获取存放索引的所有文件夹

List<String> dirPaths=GetResultInfo.getDirPath(path);

for(int k=0;k<str.length;k++){

for(int i=0;i<dirPaths.size();i++){

List<String> infoList=GetResultInfo.getResultInfos(str[k],dirPaths.get(i),titleOrContent);

for(int j=0;j<infoList.size();j++){

map.put(infoList.get(j),infoList.get(j));

}

}

}

long end = new Date().getTime();

System.out.println(">>> 搜索完毕... ... 共花费:" + (end - begin) +"毫秒...");

System.out.println("一共检索到"+map.size()+"条");

return map;

}

}

这个例子是我对 解析到的网页的 路径、标题、内容、发布日期、来源 进行建索 

然后通过对内容的检索  获取该网页的路径 

 

分享到:
评论

相关推荐

    基于Lucene和Heritrix的职位垂直搜索引擎的设计与实现

    在论文中,作者可能详细介绍了如何利用Lucene的API对职位信息进行建索引,包括字段划分、分词处理、权重计算等步骤,以确保搜索结果的相关性和精度。 其次,Heritrix是一个网络爬虫框架,用于抓取互联网上的网页...

    spring-boot-2.0.5.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.0.3.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.4.7.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.0.9.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-小鸡会飞.zip

    scratch少儿编程逻辑思维游戏源码-小鸡会飞.zip

    scratch少儿编程逻辑思维游戏源码-逃跑.zip

    scratch少儿编程逻辑思维游戏源码-逃跑.zip

    IT软件系统开发方案样本.doc

    IT软件系统开发方案样本.doc

    scratch少儿编程逻辑思维游戏源码-橡皮筋球.zip

    scratch少儿编程逻辑思维游戏源码-橡皮筋球.zip

    【覆盖度识别】基于matlab GUI图像处理技术植物覆盖度识别【含Matlab源码 13253期】.zip

    985研究生,Matlab领域优质创作者 (1)如需代码 加腾讯企鹅号,见评论区或私信; (2)代码运行版本 Matlab 2019b (3)其他仿真咨询 1 完整代码包运行+运行有问题可咨询 2 期刊或论文复现; 3 程序定制; 4 期刊写作或指导; 5 科研合作;

    高速光隔离RS232/485通讯电路模块电源及信号隔离的PCB设计详解

    内容概要:本文详细介绍了高速光隔离RS232与485通讯电路模块的设计,重点阐述了其电源和信号隔离的功能。该模块采用高速光耦合器技术,结合RS232与485通讯协议,实现长距离、高速度、高可靠性的数据传输。文中还深入探讨了PCB设计的原则,包括合理的元件布局、优化的布线方式以及高质量元件的选择,确保电路的稳定性和安全性。 适合人群:从事电子通信领域的工程师和技术人员,尤其是对RS232/485通讯电路有研究兴趣的人群。 使用场景及目标:适用于需要设计或改进RS232/485通讯电路模块的项目,旨在提升数据传输的可靠性和抗干扰能力,确保电路的安全性和稳定性。 其他说明:本文提供的内容并非实际的PCB实物,而是详细的PCB电子文件和电路图,可供进一步开发和应用。

    spring-boot-1.1.8.RELEASE.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    rocksdbjni-7.0.3.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.4.2.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    水利规范-7p倒虹吸工程及渠道防渗衬砌设计图集.zip

    水利规范-7p倒虹吸工程及渠道防渗衬砌设计图集.zip

    scratch少儿编程逻辑思维游戏源码-太空大战4.zip

    scratch少儿编程逻辑思维游戏源码-太空大战4.zip

    pcl启动器,资源下载器

    免费pcl,直接获取资源下载器

    spring-boot-1.2.6.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-1.5.7.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    spring-boot-2.0.8.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

Global site tag (gtag.js) - Google Analytics