- 浏览: 1251129 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
整个互联网可以看成是一个蜘蛛网,相互关联,可以感觉冒一个线索,找到其他的分支。搜索引擎主要包括这几个步骤:
1爬虫抓取互联网的网页。
2对网页内容进行分析
3对分析后的内容建立索引
4网页检索结果排序
5提供接口来交互。
1网页html源码的获取(WebHttpClient) 写道
package com.lucene.downpage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebHttpClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Socket webClient=new Socket("www.bnu.edu.cn",80);
PrintWriter result=new PrintWriter(webClient.getOutputStream(),true);
BufferedReader buff=new BufferedReader(new InputStreamReader(webClient.getInputStream()));
result.println("GET / HTTP/1.1");//注意这里的格式,空格一定要写对,不然找不出来。。。。
result.println("Host:bnu.edu.cn");
result.println("Connection:Close");
result.println();
boolean bRet=true;
StringBuffer sb=new StringBuffer(8096);
while(bRet){
if(buff.ready()){
int idx=0;
while(idx!=-1){
idx=buff.read();
sb.append((char)idx);
}
bRet=false;
}
}
System.out.println(sb.toString());
webClient.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("下载失败。。。请检查输入的地址是否正确");
System.exit(1);
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebHttpClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Socket webClient=new Socket("www.bnu.edu.cn",80);
PrintWriter result=new PrintWriter(webClient.getOutputStream(),true);
BufferedReader buff=new BufferedReader(new InputStreamReader(webClient.getInputStream()));
result.println("GET / HTTP/1.1");//注意这里的格式,空格一定要写对,不然找不出来。。。。
result.println("Host:bnu.edu.cn");
result.println("Connection:Close");
result.println();
boolean bRet=true;
StringBuffer sb=new StringBuffer(8096);
while(bRet){
if(buff.ready()){
int idx=0;
while(idx!=-1){
idx=buff.read();
sb.append((char)idx);
}
bRet=false;
}
}
System.out.println(sb.toString());
webClient.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("下载失败。。。请检查输入的地址是否正确");
System.exit(1);
}
}
}
2保存到本地为HTML文件 写道
package com.lucene.downpage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebCrawler {
/**
* @param args
*/
private static String Text_File_path = "D:\\workshop\\ch2\\htmlsrc.html";
public static void main(String[] args) {
try {
File file = new File(Text_File_path);
FileWriter fp = new FileWriter(file);
/* 生成下载对象 */
Socket webClient = new Socket("www.bnu.edu.cn", 80);
PrintWriter result = new PrintWriter(webClient.getOutputStream(),
true);
BufferedReader buff = new BufferedReader(new InputStreamReader(
webClient.getInputStream()));
/* 发送Http Request请求 */
result.println("GET / HTTP/1.1");// 注意这里的格式,空格一定要写对,不然找不出来。。。。
result.println("Host:bnu.edu.cn");
result.println("Connection:Close");
result.println();
boolean bRet = true;
StringBuffer sb = new StringBuffer(8096);
while (bRet) {
if (buff.ready()) {
int idx = 0;
while (idx != -1) {
idx = buff.read();
if (idx == '<') {
break;
}
}
while (idx != -1) {
sb.append((char) idx);
idx = buff.read();
}
bRet = false;
}
}
System.out.println(sb.toString());
fp.write(sb.toString());
webClient.close();
fp.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.err.println("无法访问主机");
System.exit(1);
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("下载失败。。。请检查输入的地址是否正确");
System.exit(1);
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class WebCrawler {
/**
* @param args
*/
private static String Text_File_path = "D:\\workshop\\ch2\\htmlsrc.html";
public static void main(String[] args) {
try {
File file = new File(Text_File_path);
FileWriter fp = new FileWriter(file);
/* 生成下载对象 */
Socket webClient = new Socket("www.bnu.edu.cn", 80);
PrintWriter result = new PrintWriter(webClient.getOutputStream(),
true);
BufferedReader buff = new BufferedReader(new InputStreamReader(
webClient.getInputStream()));
/* 发送Http Request请求 */
result.println("GET / HTTP/1.1");// 注意这里的格式,空格一定要写对,不然找不出来。。。。
result.println("Host:bnu.edu.cn");
result.println("Connection:Close");
result.println();
boolean bRet = true;
StringBuffer sb = new StringBuffer(8096);
while (bRet) {
if (buff.ready()) {
int idx = 0;
while (idx != -1) {
idx = buff.read();
if (idx == '<') {
break;
}
}
while (idx != -1) {
sb.append((char) idx);
idx = buff.read();
}
bRet = false;
}
}
System.out.println(sb.toString());
fp.write(sb.toString());
webClient.close();
fp.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.err.println("无法访问主机");
System.exit(1);
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("下载失败。。。请检查输入的地址是否正确");
System.exit(1);
}
}
}
分析本地网页内容,提取文本 写道
package com.lucene.downpage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class WebParser {
/**
* @param args
*/
private static String src_File_Path="D:\\workshop\\ch2\\htmlsrc.html";
private static String dst_File_Path="D:\\workshop\\ch2\\puresrc.txt";
public static void main(String[] args) throws IOException {
Parser();
}
public static void Parser() throws IOException{
boolean bContent=true;
StringBuffer st=new StringBuffer(8096*2);
char[] cBuff=new char[8096*2];
int nCount=0;
File srcFile=new File(src_File_Path);
try {
FileReader fpReader=new FileReader(srcFile);
File dstFile=new File(dst_File_Path);
FileWriter fpWriter=new FileWriter(dstFile);
nCount=fpReader.read(cBuff);
for(int i=0;i<nCount;i++){
if(bContent==false){
if(cBuff[i]=='>'){
bContent=true;
}else{
continue;
}
}
else{
if(cBuff[i]=='<'){
bContent=false;
continue;
}else if(cBuff[i]=='\n'||cBuff[i]==' '||cBuff[i]==' ' || cBuff[i]==' '){
continue;
}else if(cBuff[i]=='&'&& cBuff[i+1]=='n'&& cBuff[i+2]=='b' && cBuff[i+3]=='s' && cBuff[i+4]=='p'&& cBuff[i+5]==';'){
i=i+5;
continue;
}
st.append(cBuff[i]);
fpWriter.write(cBuff[i]);
}
}
System.out.println(st.toString());
fpReader.close();
fpWriter.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class WebParser {
/**
* @param args
*/
private static String src_File_Path="D:\\workshop\\ch2\\htmlsrc.html";
private static String dst_File_Path="D:\\workshop\\ch2\\puresrc.txt";
public static void main(String[] args) throws IOException {
Parser();
}
public static void Parser() throws IOException{
boolean bContent=true;
StringBuffer st=new StringBuffer(8096*2);
char[] cBuff=new char[8096*2];
int nCount=0;
File srcFile=new File(src_File_Path);
try {
FileReader fpReader=new FileReader(srcFile);
File dstFile=new File(dst_File_Path);
FileWriter fpWriter=new FileWriter(dstFile);
nCount=fpReader.read(cBuff);
for(int i=0;i<nCount;i++){
if(bContent==false){
if(cBuff[i]=='>'){
bContent=true;
}else{
continue;
}
}
else{
if(cBuff[i]=='<'){
bContent=false;
continue;
}else if(cBuff[i]=='\n'||cBuff[i]==' '||cBuff[i]==' ' || cBuff[i]==' '){
continue;
}else if(cBuff[i]=='&'&& cBuff[i+1]=='n'&& cBuff[i+2]=='b' && cBuff[i+3]=='s' && cBuff[i+4]=='p'&& cBuff[i+5]==';'){
i=i+5;
continue;
}
st.append(cBuff[i]);
fpWriter.write(cBuff[i]);
}
}
System.out.println(st.toString());
fpReader.close();
fpWriter.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
对提取的文本进行分词过滤 写道
package com.lucene.downpage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class WebParseFilter {
/**
* @param args
*/
private static String src_File_Path="D:\\workshop\\ch2\\htmlsrc.html";
private static String dst_File_Path="D:\\workshop\\ch2\\puresrc.txt";
public static void main(String[] args) {
try {
ParseFilter();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void ParseFilter() throws IOException{
int j=0;
boolean flag=true;
boolean bContent=true;
StringBuffer sBuffer=new StringBuffer(8096*2);
char[] cBuffer=new char[8096*2];
char[] dstBuffer=new char[8096*2];
int nCount=0;
File srcFile=new File(src_File_Path);
try {
FileReader fpReader=new FileReader(srcFile);
File dstFile=new File(dst_File_Path);
FileWriter fw=new FileWriter(dstFile);
nCount=fpReader.read(cBuffer);
for(int i=0;i<nCount;i++){
if(bContent==false){
if(cBuffer[i]=='>'){
bContent=true;
}else{
continue;
}
}else{
if(cBuffer[i]=='<'){
bContent=false;
continue;
}else if(cBuffer[i]=='\n'||cBuffer[i]==' '){
continue;
}else if(cBuffer[i]=='&'||cBuffer[i+1]=='n'||cBuffer[i+2]=='b'||cBuffer[i+3]=='s'||cBuffer[i+4]=='p'||cBuffer[i+5]==';'){
i=i+5;
continue;
}
dstBuffer[j++]=cBuffer[i];
}
}
flag=true;
for(int m=0;m<j;m++){
if((dstBuffer[m]<='Z'&&dstBuffer[m]>='A')||(dstBuffer[m]<='Z'&& dstBuffer[m]>='a')||(dstBuffer[m]<='9'&&dstBuffer[m]>='0')){
if(flag==false){
sBuffer.append(' ');
}
sBuffer.append(dstBuffer[m]);
flag=true;
}else{
if(dstBuffer[m]=='.'||dstBuffer[m]=='|'||dstBuffer[m]=='"'||dstBuffer[m]==':'||dstBuffer[m]==';'){
sBuffer.append(' ');
continue;
}
if(flag==true){
sBuffer.append(' ');
}
sBuffer.append(dstBuffer[m]);
sBuffer.append(' ');
flag=false;
}
}
System.out.println(sBuffer.toString());
fw.write(sBuffer.toString());
fpReader.close();
fw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class WebParseFilter {
/**
* @param args
*/
private static String src_File_Path="D:\\workshop\\ch2\\htmlsrc.html";
private static String dst_File_Path="D:\\workshop\\ch2\\puresrc.txt";
public static void main(String[] args) {
try {
ParseFilter();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void ParseFilter() throws IOException{
int j=0;
boolean flag=true;
boolean bContent=true;
StringBuffer sBuffer=new StringBuffer(8096*2);
char[] cBuffer=new char[8096*2];
char[] dstBuffer=new char[8096*2];
int nCount=0;
File srcFile=new File(src_File_Path);
try {
FileReader fpReader=new FileReader(srcFile);
File dstFile=new File(dst_File_Path);
FileWriter fw=new FileWriter(dstFile);
nCount=fpReader.read(cBuffer);
for(int i=0;i<nCount;i++){
if(bContent==false){
if(cBuffer[i]=='>'){
bContent=true;
}else{
continue;
}
}else{
if(cBuffer[i]=='<'){
bContent=false;
continue;
}else if(cBuffer[i]=='\n'||cBuffer[i]==' '){
continue;
}else if(cBuffer[i]=='&'||cBuffer[i+1]=='n'||cBuffer[i+2]=='b'||cBuffer[i+3]=='s'||cBuffer[i+4]=='p'||cBuffer[i+5]==';'){
i=i+5;
continue;
}
dstBuffer[j++]=cBuffer[i];
}
}
flag=true;
for(int m=0;m<j;m++){
if((dstBuffer[m]<='Z'&&dstBuffer[m]>='A')||(dstBuffer[m]<='Z'&& dstBuffer[m]>='a')||(dstBuffer[m]<='9'&&dstBuffer[m]>='0')){
if(flag==false){
sBuffer.append(' ');
}
sBuffer.append(dstBuffer[m]);
flag=true;
}else{
if(dstBuffer[m]=='.'||dstBuffer[m]=='|'||dstBuffer[m]=='"'||dstBuffer[m]==':'||dstBuffer[m]==';'){
sBuffer.append(' ');
continue;
}
if(flag==true){
sBuffer.append(' ');
}
sBuffer.append(dstBuffer[m]);
sBuffer.append(' ');
flag=false;
}
}
System.out.println(sBuffer.toString());
fw.write(sBuffer.toString());
fpReader.close();
fw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
对分词后的文本建立索引 写道
package com.lucene.downpage;
public class InfoItem {
/**
* @param args
*/
public int fileId;
public int offset;
InfoItem next;
public InfoItem(){
fileId=0;
offset=0;
next=null;
}
public InfoItem(int id,int pos){
fileId=id;
offset=pos;
next=null;
}
public InfoItem getNext() {
return next;
}
public void setNext(InfoItem next) {
this.next = next;
}
public int getFileId() {
return fileId;
}
public int getOffset() {
return offset;
}
}
public class InfoItem {
/**
* @param args
*/
public int fileId;
public int offset;
InfoItem next;
public InfoItem(){
fileId=0;
offset=0;
next=null;
}
public InfoItem(int id,int pos){
fileId=id;
offset=pos;
next=null;
}
public InfoItem getNext() {
return next;
}
public void setNext(InfoItem next) {
this.next = next;
}
public int getFileId() {
return fileId;
}
public int getOffset() {
return offset;
}
}
建立索引并查询 写道
package com.lucene.downpage;
import java.util.Hashtable;
public class WordIndex {
/**
* @param args
*/
static Hashtable keyWordIdx;
static String[] FileList = {"北 京 师 范 大 学", "北 师 大 附 属 实 验 小 学",
"北 师 大 第 二 附 属 中 学" };
public static void main(String[] args) {
try {
index();
search("北");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void index() throws Exception{
InfoItem item,item2;
System.out.println("index:==========begin=================");
keyWordIdx=new Hashtable();
try{
System.out.println("index:Hash Table initial Size:"+keyWordIdx.size());
for(int i=0;i<3;i++){
int len=FileList[i].length();
for(int j=0;j<len;j++){
item=new InfoItem(i,j);
String key=FileList[i].substring(j,j+1);
System.out.print(key);
if(!keyWordIdx.containsKey(key)){
keyWordIdx.put(key,item);
}else{
item2=(InfoItem)keyWordIdx.get(key);
item.setNext(item2);
keyWordIdx.put(key, item);
}
}
System.out.println("");
}
System.out.println("index:Hash Table finish Size:"+keyWordIdx.size());
}catch(Exception ex){
throw ex;
}
System.out.println("====================end==================");
}
public static void search(String keyWord) throws Exception{
InfoItem item;
System.out.println("search:=============begin================");
if(null==keyWordIdx){
return ;
}
try{
item=(InfoItem)keyWordIdx.get(keyWord);
while(item!=null){
System.out.println("Search:File number:"+item.getFileId());
System.out.println("Search:File offset:"+item.getOffset());
System.out.println("Search:File Content:"+FileList[item.getOffset()]);
item=item.getNext();
}
System.out.println("search:============end================");
}catch(Exception e){
throw e;
}
}
}
import java.util.Hashtable;
public class WordIndex {
/**
* @param args
*/
static Hashtable keyWordIdx;
static String[] FileList = {"北 京 师 范 大 学", "北 师 大 附 属 实 验 小 学",
"北 师 大 第 二 附 属 中 学" };
public static void main(String[] args) {
try {
index();
search("北");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void index() throws Exception{
InfoItem item,item2;
System.out.println("index:==========begin=================");
keyWordIdx=new Hashtable();
try{
System.out.println("index:Hash Table initial Size:"+keyWordIdx.size());
for(int i=0;i<3;i++){
int len=FileList[i].length();
for(int j=0;j<len;j++){
item=new InfoItem(i,j);
String key=FileList[i].substring(j,j+1);
System.out.print(key);
if(!keyWordIdx.containsKey(key)){
keyWordIdx.put(key,item);
}else{
item2=(InfoItem)keyWordIdx.get(key);
item.setNext(item2);
keyWordIdx.put(key, item);
}
}
System.out.println("");
}
System.out.println("index:Hash Table finish Size:"+keyWordIdx.size());
}catch(Exception ex){
throw ex;
}
System.out.println("====================end==================");
}
public static void search(String keyWord) throws Exception{
InfoItem item;
System.out.println("search:=============begin================");
if(null==keyWordIdx){
return ;
}
try{
item=(InfoItem)keyWordIdx.get(keyWord);
while(item!=null){
System.out.println("Search:File number:"+item.getFileId());
System.out.println("Search:File offset:"+item.getOffset());
System.out.println("Search:File Content:"+FileList[item.getOffset()]);
item=item.getNext();
}
System.out.println("search:============end================");
}catch(Exception e){
throw e;
}
}
}
发表评论
-
lucene+nutch学习笔记六:lucene使用需要注意的地方
2009-06-02 15:58 14361尽量减少不必要的存储。 基本的办法是在添加特定的 ... -
lucene+nutch学习笔记五:创建一个简单的索引
2009-06-01 14:15 2020package chapter5; import jav ... -
lucene+nutch学习笔记四:搜索引擎信息索引
2009-06-01 13:55 1848在实际的生活中,Nutch只能从网络上收集网页 , ... -
lucene+nutch学习笔记一:搜索引擎的一些常识
2009-05-21 10:00 15531常用搜索引擎 搜索引擎是我们现在网 ... -
lucene2.4+nutch学习笔记三:lucene 在多个文本文档里找出包含一些关键字的文档
2009-05-07 13:52 48061运行环境lucene2.4 ...
相关推荐
《Lucene 2.4与Nutch学习笔记:在多文档中搜索关键词》 Lucene是一个高性能、全文检索库,而Nutch则是一个开源的网络爬虫项目,两者结合使用,能够实现对大量文本文档的高效搜索和索引。这篇学习笔记主要探讨如何...
其中内容均为前段时间研究开源搜索引擎时搜集参考的资料,非常齐全包含的内容有: Computing PageRank Using Hadoop.ppt Google的秘密PageRank彻底解说中文版.doc JAVA_Lucene_in_Action教程完整版.doc Java开源搜索...
### Nutch全文搜索学习笔记 #### 一、Nutch安装与配置 **1. Linux环境下的JDK安装** 为了能够顺利地安装并运行Nutch,首先确保系统中已安装Java Development Kit (JDK) 并且正确配置了`JAVA_HOME`环境变量。如果...
Nutch 是一个开源的、基于 Lucene 的网络搜索引擎项目,它提供了一套完整的搜索引擎解决方案,包括网页抓取、索引和搜索功能。Nutch 0.8 版本尤其值得关注,因为它完全使用 Hadoop 进行了重写,从而充分利用了 ...
这个学习笔记主要涵盖了Lucene的基本概念,包括索引、文档、域和项,以及安装配置和索引的基本过程。 1. **基本概念** - **索引(Index)**:索引是Lucene的核心,它是由一系列文档组成的。每个索引包含了对文档...
Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,提供了文本检索和分析的核心工具。作为一个高性能、可扩展的信息检索库,Lucene被广泛应用于各种搜索应用,如网站搜索、文档检索、日志分析...
- **2004年**:Cutting和Cafarella开始开发Nutch项目,这是一个开源搜索引擎项目。 - **2006年**:在Google发布的关于GFS和MapReduce的研究报告启发下,他们开始着手创建Hadoop项目,目的是为了提供一个低成本的...
Doug Cutting在Lucene的基础上开发了Nutch搜索引擎,后发展为Hadoop。 5. **Hadoop组件**: - HDFS(Hadoop分布式文件系统):提供高容错性和高吞吐量的数据存储。 - MapReduce:分布式计算框架,用于大规模数据...
随着需求的增长,Cutting与Mike Cafarella合作,开发了Nutch,一个基于Lucene的开源搜索引擎项目,旨在提供类似Google的全网搜索功能。随着互联网的爆炸式增长,数据量激增,Google的GFS(Google File System)和...