lucene+heritrix day1

shibenjie 2008-04-03 03:48:30
package ear.lucenedemo.process;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;

import jeasy.analysis.MMAnalyzer;

/**
*
* @author smileWater
* function 为要搜索的文件创建一个索引文件
* 通常使用lucene的步骤如下:
*1.为要处理的内容建立索引(有时可能在建立索引以前,要对文档做一些预处理工作)
*2.构建查询的对象
*3.利用查询对象在索引中查找
*/
public class IndexProcesser {
//成员变量,存储创建的索引文件要存放的位置
private String INDEX_STORE_PATH="d:\\lucene\\luceneIndex";
public static void main(String[] args){
IndexProcesser indexProcessor=new IndexProcesser();
long startTime=System.currentTimeMillis();
indexProcessor.createIndex("d:\\lucene\\luceneData\\");
long endTime=System.currentTimeMillis();
System.out.println("The time for create index is "+(endTime-startTime)+" ms.");
}
//创建索引
/*
* inputDir:要索引的文件存放的位置
*/
public void createIndex(String inputDir){
try {
//以MMAnalyzer作为分词工具创建一个IndexWriter
IndexWriter writer=new IndexWriter(INDEX_STORE_PATH,new MMAnalyzer(),true);
File filesDir=new File(inputDir);

//取得所有需要建立文件索引的文件数组
File[] files=filesDir.listFiles();

//遍历数组
for(int i=0;i<files.length;i++){
//获取文件名
String fileName=files[i].getName();
//判断是否是txt类型的文件
if(fileName.substring(fileName.lastIndexOf(".")).equals(".txt")){
//创建一个Document
Document doc=new Document();

//为文名字创建一个域field
//Field.Store.YES表示该Field需要存储
//Field.Store.NO 表示该Field不需要存储
//Field.Index.No表示该Field不需要被索引,也就是用户不需要查找该Field的值
//Field.Index.TOKENIZED表示该Field先 被分词在索引
//Field.Index.UN_TOKENIZED表示不对该Field分词,但是要对他进行索引
Field field=new Field("filename",files[i].getName(),Field.Store.YES,
Field.Index.TOKENIZED);
doc.add(field);

//为文件内容创建一个域field
field=new Field("content",loadFileToString(files[i]),Field.Store.NO,
Field.Index.TOKENIZED);

doc.add(field);
writer.addDocument(doc);
}
}
//关闭IndexWriter,一定要关闭索引
//如果没有关闭就会发现索引目录内除了segments文件外一无所有
writer.close();


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String loadFileToString(File file){
try {
BufferedReader br=new BufferedReader(new FileReader(file));
StringBuffer sb=new StringBuffer();
String line=br.readLine();
while(line!=null){
sb.append(line);
line=br.readLine();
}
br.close();
return sb.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}



package ear.lucenedemo.process;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;

/**
*
* @author ffshi
* function:针对建立好的索引提供搜索的类
*/
public class Search {
// 全局变量,索引所处的路径
private String INDEX_STORE_PATH="d:\\lucene\\luceneIndex";

public static void main(String args[]){
Search search=new Search();
search.indexSearch("content","那个");
System.out.println("***************************************************************");
search.StringSearch("那个", "d:\\lucene\\luceneData");
}

//利用lucene API进行搜索
public void indexSearch(String searchType,String searchKey){
try {
//根据索引路径建立IndexSearcher
IndexSearcher searcher=new IndexSearcher(INDEX_STORE_PATH);

//建立搜索单元,searchType代表搜索的Field,searchKey代表关键字
Term t=new Term(searchType,searchKey);

//有Term生成一个Query
Query q=new TermQuery(t);

long startTime=System.currentTimeMillis();
//获取一个<document,frequency>的枚举对象TermDocs
TermDocs termDocs=searcher.getIndexReader().termDocs(t);
while(termDocs.next()){
//输出文档中出现关键词的次数
System.out.println(termDocs.freq());

//输出搜索到关键词的文档
System.out.println(searcher.getIndexReader().document(termDocs.doc()));
}
long endTime=System.currentTimeMillis();

long timeOfSearch=endTime-startTime;
System.out.println("The time for index search is "+timeOfSearch+" ms");

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


//不用lucene进行的搜索,也就是不创建索引进行搜索,直接用String自带的匹配功能
// 可以看一下搜索用时 pk 一下lucene
/**
* keyword:要搜索的关键字
* searchDir:要搜索的范围,即是指定在那个目录下进行搜索
*/
public void StringSearch(String keyword,String searchDir){
File fileDir=new File(searchDir);
//返回该文件夹下面的所有文件数组
File[] files=fileDir.listFiles();

//用HashMap保存文件名和匹配次数对
Map rs=new HashMap();

long startTime=System.currentTimeMillis();

//开始遍历所有文件
for(int i=0;i<files.length;i++){
//初始化匹配次数
int hits=0;
try {
BufferedReader br=new BufferedReader(new FileReader(files[i]));
StringBuffer sb=new StringBuffer();
String line=br.readLine();
while(line!=null){
sb.append(line);
line=br.readLine();

}
br.close();
String stringToSearch=sb.toString();

//初始化fromIndex
int fromIndex=-keyword.length();
//逐个匹配这个关键词
while((fromIndex=stringToSearch.indexOf(keyword,fromIndex+keyword.length()))
!=-1){
hits++;
}
//将文件名字和匹配次数加入HashMap
rs.put(files[i].getName(), new Integer(hits));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
//输出查询结果
Iterator it=rs.keySet().iterator();
while(it.hasNext()){
String fileName=(String)it.next();
Integer hits=(Integer)rs.get(fileName);
System.out.println("find "+hits.intValue()+" matches in "+fileName);

}
long endTime=System.currentTimeMillis();
long timeOfSearch=endTime-startTime;
System.out.println("The time for String search is : "+timeOfSearch+" ms.");
}

}

...全文
118 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shibenjie 2009-07-16
  • 打赏
  • 举报
回复
4 30
下载代码方式:https://pan.quark.cn/s/edc2010ad9a6 ### H3C IMC Portal 认证操作手册关键知识点阐释 #### 一、Portal认证的介绍 **Portal认证**,英文表述为“入口”,在信息技术领域中特指一种利用Web界面核实用户身份的机制,其目的在于对用户的网络访问权限进行管理。在实施Portal认证的网络架构中,未完成认证的用户在尝试上网时会被强制导向一个特定的网址,该网址提供部分免费的网络服务。若用户希望获取更多的互联网资源,则必须通过Portal Web服务器所提供的界面完成身份验证流程。 #### 二、Portal认证系统的构成与作用 1. **系统构成**: - **接入设备**:承担检测用户是否已完成认证的责任,并根据认证结果执行相应的管理策略。 - **Portal Web服务器**:负责呈现认证界面以及处理用户的认证需求。 - **认证服务器**:通常指代RADIUS服务器,承担最终的用户身份核实职责。 2. **功能特点**: - **安全增强**:集成多种安全措施以保障用户数据及网络资源的完整性。 - **本地Portal Web服务器支持**:允许在本地环境中部署Portal Web服务器,以减少对外部服务的依赖性。 - **交互机制**:描述用户与系统之间的认证交互过程。 - **认证方式**:涵盖用户名密码验证等多种认证手段。 - **认证步骤**:详细说明认证的每一个环节,确保用户能够顺利完成身份核实。 - **过滤规范**:用于监管用户在网络中的行为模式。 - **BYOD支持**:实现Bring Your Own Device(自带设备)的认证功能,适应多元化的设备环境。 -...
代码转载自:https://pan.quark.cn/s/dda4d8b11acf 在线支付系统源代码与第三方支付平台构成了现代电子商务体系中不可或缺的组成部分,它们共同形成了数字交易的基础框架。本内容将详细剖析这些核心要素,并围绕相关主题展开一系列关联性知识点的论述。 首先,我们需要明确在线支付系统的概念。在线支付系统是指为消费者提供通过互联网购买商品或服务并完成安全支付操作的专用平台。此类系统通常整合了信用卡处理、电子钱包、银行直接转账等多种支付选项,旨在为用户创造流畅的购物环境。在构建在线支付系统时,保障交易安全、提升使用便捷度以及优化处理效率是必须优先考虑的关键要素。 其次,我们将探讨系统源代码的相关内容。源代码指的是由程序员采用人类可理解语言编写的应用程序基础指令集。对于编程初学者而言,研究在线支付系统的源代码是掌握此类系统开发方法的重要途径。通过分析源代码,开发者可以深入掌握支付流程中的各个关键环节,例如用户身份验证、交易请求处理、银行系统对接等操作。源代码的解读还能帮助开发者学习行业最佳实践,有效预防常见的安全隐患,包括数据库注入攻击和跨站脚本威胁。 再次,第三方支付系统作为另一种重要的支付模式值得关注。这类系统充当商家与消费者之间的中介角色,负责处理交易过程中的支付环节与清算工作。常见的第三方支付服务提供商包括支付宝、微信支付以及PayPal等知名平台。它们通过提供标准化的接口,使商家能够便捷地接入多元化支付渠道,同时通过实施额外的安全防护措施,如风险评估机制和反欺诈系统等,确保消费者在支付过程中的安全性。对于开发者而言,熟练掌握并整合第三方支付系统的应用程序接口(API)是实现在线支付功能的核心技能。 在进行在线支付系统开发时,开发者需要重...
内容概要:本文档介绍了M-PCIe(Mobile PCI Express)技术,这是一种将PCIe协议映射到M-PHY物理层的规范(ECN),旨在将高性能互连扩展至移动设备及其他对功耗敏感的应用场景。M-PCIe保留了PCIe的事务层、数据链路层和协议栈的完整性,仅对物理层逻辑进行优化适配,支持HS-G1至HS-G3高速速率以及PWM-G1低速模式,具备动态链路带宽重配置能力,可在运行时调整速率系列、高速档位和子链路宽度,且允许非对称链路宽度。文档详细阐述了M-PCIe的链路架构、符号编码、帧结构、时钟补偿、初始化流程、LTSSM状态机、HIBERN8低功耗机制及测试方法,并强调其实现需同时符合PCI-SIG与MIPI联盟标准。; 适合人群:从事高速接口设计、移动平台硬件开发或嵌入式系统研发的工程师,尤其是涉及PCIe与M-PHY集成的技术人员;具备数字电路、串行链路通信基础知识的研发人员。; 使用场景及目标:①理解如何在移动设备中实现高效能、低功耗的PCIe连接;②掌握M-PCIe链路初始化、带宽动态调节和低功耗状态切换的设计原理;③为开发兼容M-PCIe的芯片、模块或系统提供技术参考。; 阅读建议:此文档为技术规范类资料,建议结合MIPI M-PHY标准与PCIe基础规范对照学习,重点关注链路训练、状态机转换与时序参数定义,适用于芯片设计、固件开发与合规性测试阶段的工程实践。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧