- 浏览: 199160 次
文章分类
最新评论
-
code_xiaoke:
session可是有30分钟有效期的还有如果在分布式的环境下 ...
Java Web 用户登陆示例代码 -
xul0038:
http://www.baidu.com
Java Web 用户登陆示例代码 -
16866:
非常棒,配置信息呢
Nginx负载均衡 -
开发小菜:
什么意思,没明白?能不能写一个例子
JS 实现DIV随浏览器窗口大小变化
因为lucene索引的时候是将String型的信息建立索引的,所以这里必须是将word/pdf/html等文件的内容转化问字符型。
lucene的jar包自己去下载。
首先是建立索引的代码:
public class TextFileIndexer {
public static void main(String[] args) throws Exception {
/* 指明要索引文件夹的位置,这里是d盘的s文件夹下 */
File fileDir = new File("d:\\s");
/* 这里放索引文件的位置 */
File indexDir = new File("d:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
true);
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();
//增加document到索引去
System.out.println("File正在被索引.");
/*
* 注意要变的就是这里,路径和读取文件的方法
* */
String path ="d:\\s\\2.doc";
String temp = ReadFile.readWord(path);
// String path ="d:\\s\\index.htm";
// String temp = ReadFile.readHtml(path);
Document document = new Document();
Field FieldPath = new Field("path",path,
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
//optimize()方法是对索引进行优化
indexWriter.optimize();
indexWriter.close();
//测试一下索引的时间
long endTime = new Date().getTime();
System.out
.println("这花费了"
+ (endTime - startTime)
+ " 毫秒来把文档增加到索引里面去!"
+ fileDir.getPath());
}
}
上面已经注释了要换的地方,我们要做的就是换文件的路径和读取文件的方法。
下面来具体看下读取文件的方法
1.首先来看WORD文档:
我这里用的是poi,相关jar包自己去下载,然后加到工程中(以下所要用的jar包也是,不再重复说)。
来看相关代码:
public static String readWord(String path) {
StringBuffer content = new StringBuffer("");// 文档内容
try {
HWPFDocument doc = new HWPFDocument(new FileInputStream(path));
Range range = doc.getRange();
int paragraphCount = range.numParagraphs();// 段落
for (int i = 0; i < paragraphCount; i++) {// 遍历段落读取数据
Paragraph pp = range.getParagraph(i);
content.append(pp.text());
}
} catch (Exception e) {
}
return content.toString().trim();
}
2.PDF文件用的是PDFbox:
public static String readPdf(String path) throws Exception {
StringBuffer content = new StringBuffer("");// 文档内容
FileInputStream fis = new FileInputStream(path);
PDFParser p = new PDFParser(fis);
p.parse();
PDFTextStripper ts = new PDFTextStripper();
content.append(ts.getText(p.getPDDocument()));
fis.close();
return content.toString().trim();
}
3.html文件:
public static String readHtml(String urlString) {
StringBuffer content = new StringBuffer("");
File file = new File(urlString);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
// 读取页面
BufferedReader reader = new BufferedReader(new InputStreamReader(
fis,"utf-8"));//这里的字符编码要注意,要对上html头文件的一致,否则会出乱码
String line = null;
while ((line = reader.readLine()) != null) {
content.append(line + "\n");
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
String contentString = content.toString();
return contentString;
}
public static String readTxt(String path) {
StringBuffer content = new StringBuffer("");// 文档内容
try {
FileReader reader = new FileReader(path);
BufferedReader br = new BufferedReader(reader);
String s1 = null;
while ((s1 = br.readLine()) != null) {
content.append(s1 + "\r");
}
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString().trim();
}
接下来数搜索代码:
public class TestQuery {
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
//搜索内容自己换
String queryString = "根据国务院的决定";
Query query = null;
IndexSearcher searcher = new IndexSearcher("d:\\index"); //这里注意索引存放的路径
Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
/**
* 建索引的时候我们指定了body建立为内容,我们搜索的时候也是针对body的,所以
* QueryParser qp = new QueryParser("body", analyzer);
* 这句和建立索引时候
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
*的这句的"body"是对应的。
*/
query = qp.parse(queryString);
} catch (ParseException e) {
System.out.println("异常");
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("找到:" + hits.length() + " 个结果!");
for (int i = 0; i < hits.length(); i++) {//输出搜索信息
Document document = hits.doc(i);
System.out.println("contents:"+document.get("body"));
//同样原理这里的document.get("body")就是取得建立在索引文件里面的额body的所有内容
//你若想输出文件路径就用document.get("path")就可以了
}
} else{
System.out.println("0个结果!");
}
}
}
lucene的jar包自己去下载。
首先是建立索引的代码:
public class TextFileIndexer {
public static void main(String[] args) throws Exception {
/* 指明要索引文件夹的位置,这里是d盘的s文件夹下 */
File fileDir = new File("d:\\s");
/* 这里放索引文件的位置 */
File indexDir = new File("d:\\index");
Analyzer luceneAnalyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,
true);
File[] textFiles = fileDir.listFiles();
long startTime = new Date().getTime();
//增加document到索引去
System.out.println("File正在被索引.");
/*
* 注意要变的就是这里,路径和读取文件的方法
* */
String path ="d:\\s\\2.doc";
String temp = ReadFile.readWord(path);
// String path ="d:\\s\\index.htm";
// String temp = ReadFile.readHtml(path);
Document document = new Document();
Field FieldPath = new Field("path",path,
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
//optimize()方法是对索引进行优化
indexWriter.optimize();
indexWriter.close();
//测试一下索引的时间
long endTime = new Date().getTime();
System.out
.println("这花费了"
+ (endTime - startTime)
+ " 毫秒来把文档增加到索引里面去!"
+ fileDir.getPath());
}
}
上面已经注释了要换的地方,我们要做的就是换文件的路径和读取文件的方法。
下面来具体看下读取文件的方法
1.首先来看WORD文档:
我这里用的是poi,相关jar包自己去下载,然后加到工程中(以下所要用的jar包也是,不再重复说)。
来看相关代码:
public static String readWord(String path) {
StringBuffer content = new StringBuffer("");// 文档内容
try {
HWPFDocument doc = new HWPFDocument(new FileInputStream(path));
Range range = doc.getRange();
int paragraphCount = range.numParagraphs();// 段落
for (int i = 0; i < paragraphCount; i++) {// 遍历段落读取数据
Paragraph pp = range.getParagraph(i);
content.append(pp.text());
}
} catch (Exception e) {
}
return content.toString().trim();
}
2.PDF文件用的是PDFbox:
public static String readPdf(String path) throws Exception {
StringBuffer content = new StringBuffer("");// 文档内容
FileInputStream fis = new FileInputStream(path);
PDFParser p = new PDFParser(fis);
p.parse();
PDFTextStripper ts = new PDFTextStripper();
content.append(ts.getText(p.getPDDocument()));
fis.close();
return content.toString().trim();
}
3.html文件:
public static String readHtml(String urlString) {
StringBuffer content = new StringBuffer("");
File file = new File(urlString);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
// 读取页面
BufferedReader reader = new BufferedReader(new InputStreamReader(
fis,"utf-8"));//这里的字符编码要注意,要对上html头文件的一致,否则会出乱码
String line = null;
while ((line = reader.readLine()) != null) {
content.append(line + "\n");
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
String contentString = content.toString();
return contentString;
}
public static String readTxt(String path) {
StringBuffer content = new StringBuffer("");// 文档内容
try {
FileReader reader = new FileReader(path);
BufferedReader br = new BufferedReader(reader);
String s1 = null;
while ((s1 = br.readLine()) != null) {
content.append(s1 + "\r");
}
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString().trim();
}
接下来数搜索代码:
public class TestQuery {
public static void main(String[] args) throws IOException, ParseException {
Hits hits = null;
//搜索内容自己换
String queryString = "根据国务院的决定";
Query query = null;
IndexSearcher searcher = new IndexSearcher("d:\\index"); //这里注意索引存放的路径
Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser qp = new QueryParser("body", analyzer);
/**
* 建索引的时候我们指定了body建立为内容,我们搜索的时候也是针对body的,所以
* QueryParser qp = new QueryParser("body", analyzer);
* 这句和建立索引时候
Field FieldBody = new Field("body", temp, Field.Store.YES,
Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
*的这句的"body"是对应的。
*/
query = qp.parse(queryString);
} catch (ParseException e) {
System.out.println("异常");
}
if (searcher != null) {
hits = searcher.search(query);
if (hits.length() > 0) {
System.out.println("找到:" + hits.length() + " 个结果!");
for (int i = 0; i < hits.length(); i++) {//输出搜索信息
Document document = hits.doc(i);
System.out.println("contents:"+document.get("body"));
//同样原理这里的document.get("body")就是取得建立在索引文件里面的额body的所有内容
//你若想输出文件路径就用document.get("path")就可以了
}
} else{
System.out.println("0个结果!");
}
}
}
发表评论
-
(转)Lucene打分规则与Similarity模块详解
2013-02-06 14:08 1191搜索排序结果的控制 Lu ... -
Compass将lucene、Spring、Hibernate三者结合
2013-02-01 11:02 1676版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声 ... -
Lucene3.0详解
2013-02-01 10:57 1395★第一部分:概述 1. 我 ... -
Lucene为不同字段指定不同分词器(转)
2013-01-31 17:34 3437在lucene使用过程中,如 ... -
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎
2012-11-19 09:55 1381前两天看到了一个中国新闻网,这个网站的搜索form的actio ... -
Lucene多字段搜索
2012-11-19 09:53 1015最近在学习Lucene的过程中遇到了需要多域搜索并排序的问题, ... -
lucene之sort
2012-11-16 15:06 1082package cn.zqh.lucene.sort; im ... -
Lucene相关度排序的调整
2012-11-16 11:38 1721Lucene的搜索结果默认按 ... -
使用solr搭建你的全文检索
2012-09-28 16:34 1039Solr 是一个可供企业使用的、基于 Lucene 的开箱即用 ... -
《Lucene in action》中推荐的Lucene分页方式
2012-09-28 16:33 854在《Lucene in action》 中专门讨论了如何对Hi ... -
lucene3搜索引擎,索引建立搜索排序分页高亮显示, IKAnalyzer分词
2013-01-27 19:17 1751package com.zjr.service.impl; ... -
用MultiSearcher在多索引中进行搜索
2013-07-09 09:45 993/** * 多索引进行查询 */ ... -
lucene 中一个Filed中包含多值的范围查询
2013-07-09 09:45 1343package tools.lucene; ... -
使用lucene PrefixQuery 根据拼音前缀查询
2012-07-17 10:52 1357PrefixQuery类似于 数据库中的 like 'a%'查 ... -
lucene 中一个Filed中包含多值的范围查询
2012-07-17 10:50 1019package tools.lucene; ... -
solr部署
2012-07-17 10:41 10111. 认识到solr是作为一个webapp角色; 2. ... -
Solr快速教程
2012-07-17 10:38 1146Solr快速教程 加载及配置步骤: 1.下载最新版本的Solr ... -
PrefixQuery前缀搜索符合的所有放入map
2012-07-17 10:37 1226/** PrefixQuery前缀搜索符合的所有放入map ... -
(转载)Lucene几种中文分词的总结
2012-04-13 14:40 1839Lucene几种中文分词的总结 博客分类: ... -
数据挖掘网址共享
2012-04-13 14:37 1449数据挖掘网络应用搜索引擎企业应用Lotus [/color]知 ...
相关推荐
Apache Lucene 是一个开源的全文检索库,它提供了一种高效、可扩展的方式来构建全文搜索引擎。在Java开发中,Lucene被广泛用于实现文件的全文检索功能,包括对doc、docx、pdf、txt等常见格式文档的文本内容检索。在...
在版本3.6中,它提供了强大的文件检索功能,支持对多种文件类型的搜索,包括PDF、Word、PPT、Excel、TXT、HTML和XML等。这个版本的Lucene已经过封装,使得开发者能够更方便地集成到自己的项目中,实现快速的全文检索...
总结,利用Apache Lucene实现对Word、PPT、Excel、PDF和TXT等文件的全文检索,需要经过文件解析、内容提取、分词、索引构建、查询解析、搜索匹配、结果排序和展示等多个环节。这一过程涉及到了文件处理、文本分析和...
Lucene 广泛应用于内容管理系统、企业级搜索引擎、网站的站内搜索、数据分析平台等场景,为用户提供高效、准确的全文检索体验。 ### 6. 结合源码和工具学习 了解了 Lucene 的基础知识后,可以通过阅读源码来深入...
每个单元格的内容会被视为独立的文本片段,合并后形成一个文档供Lucene索引。需要注意的是,Excel可能包含公式和非可视内容,处理时应考虑其对搜索结果的影响。 3. **PDF文档处理**:PDF文件的处理较为复杂,因为...
### Lucene索引PDF、HTML、Word与TXT文档 #### 概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的全文检索应用开发中。本篇文章将详细介绍如何使用Lucene对PDF、HTML、Word及纯文本(TXT...
这种技术广泛应用于各种场景,包括但不限于操作系统中的文件搜索、集成开发环境(IDE)中的帮助文档搜索、社交媒体及博客系统的文章搜索以及通用搜索引擎。 1. **Windows 文件搜索**:用户可以通过此功能在计算机...
- **标题与描述**: 本资料“nutch+lucene开发自己的搜索引擎ch3.pdf”聚焦于介绍如何使用Nutch和Lucene来构建自己的搜索引擎,特别强调了第三章:开源搜索引擎入门。 - **标签与内容**: 标签为“Nutch”,表明主要...
lucene索引入门 Lucene 是一个基于 Java 的全文搜索引擎库,提供了一个简单、灵活、可扩展的搜索解决方案。Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index)...
Lucene是一款开源的全文检索库,由Apache软件基金会开发,广泛应用于各种搜索引擎的构建。在3.0.1版本中,Lucene提供了一套高效、可扩展的文本搜索解决方案。其核心特性包括文档的索引、查询解析、评分机制以及结果...
"搜索引擎学习资料"和"搜索引擎原理.pdf"这两个文件则可能提供了更广泛的信息检索和搜索引擎理论知识。PDF文件通常包含高质量的图像和排版,适合保存和分享学术资料。在这个PDF文档中,读者可以深入学习搜索引擎的...
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...
通过xpdf,可以从Pdf文件中准确地抽取文本内容,使其能够被Lucene索引和检索。具体步骤如下: 1. **下载并安装xpdf**: 首先,从官方网站http://www.foolabs.com/xpdf/ 下载xpdf工具包,并按照指南完成安装。 2. **...
Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在应用程序中实现复杂的...
例如,使用Lucene.NET这样的全文搜索引擎库,可以建立高效的倒排索引,快速定位含有特定词汇的文档。 七、并发与多线程 对于大量文件的检索,使用多线程或异步处理能显著提升性能。C#的`Task`类和`async/await`...
在实践中,Lucene可以处理多种格式的文件,如Word、Excel、PPT和PDF,这些文件通过特定的解析器(如Apache POI和PDFBox)将内容提取出来,然后进行索引。通过封装接口,开发者可以轻松地将这些功能整合到自己的应用...
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...
Lucene是一个高性能的全文检索库,被广泛应用于构建搜索引擎的索引机制。它支持复杂查询,并且能够处理大规模数据集,非常适合用于垂直搜索引擎的索引构建。 #### 三、Heritrix与Lucene的应用 Heritrix与Lucene的...
本文将深入探讨如何利用Apache Lucene构建一个强大的搜索引擎,覆盖HTML、TXT、PDF和Word等多种格式的文档。Apache Lucene是Java语言开发的一个全文检索库,它提供了强大的搜索功能,同时也具有高度可扩展性和灵活性...