导航:首页 > 编程语言 > java搜索引擎实现

java搜索引擎实现

发布时间:2024-06-26 19:41:06

Ⅰ 用java 实现一个搜索功能,要求搜索某个关键字,然后把包括这个关键字的一段话输出到文档中。qq454284728

一、什么叫搜索引擎?

在Internet上有上百亿可用的公共Web页面,即使是最狂热的冲浪者也不会访问到所有的页面,而只能看到其中的一小部分,更不会在这浩瀚的Web海洋中发现你那即使精彩却渺小的一隅。当然你可以为你的存在做广告,可以用大大的字把你的URL刻在你的身体上,然后裸体穿过白宫草坪,但你得保证媒体正好在那里,并注视到了这一切。与其这样做,不如好好去理解搜索引擎是如何工作的?又怎样选择和使用"keywords"(关键词)等等。
本文的目的就是让众多的页面设计者在了解搜索引擎的基础上,寻求如何使自己的页面在搜索引擎索返回的列表中获得好的排列层次的方法。

"搜索引擎"这个术语一般统指真正意义上的搜索引擎(也就是全文检索搜索引擎)和目录(即目录式分类搜索引擎),其实他们是不一样的,其区别主要在于返回的搜索结果列表是如何编排的。

1、目录

目录(比如Yahoo!)返回的列表是由人工来编排的。
这类引擎提供了一份人工按类别编排的网站目录,各类下边排列着属于这一类别的网站的站名和网址链接,再记录一些摘要信息,对该网站进行概述性介绍(摘要可能是你提交过去的,也可以是引擎站点的编辑为你的站点所做的评价)。人们搜索时就按相应类别的目录查询下去。
这类引擎往往还伴有网站查询功能,也称之为网站检索,即提供一个文字输入框和一个按钮。我们可以在文字框中输入要查找的字、词或短语,再点击按钮,便会在目录中查找相关的站名、网址和内容提要,将查到的内容列表送过来。目前国内Sohoo、常青藤等都是这种搜索方式。

2、搜索引擎

搜索引擎(如HotBot)是自动创建列表的。
搜索引擎看起来与目录的网站查询非常相似,也提供一个文字输入框和按钮,使用方法也相同,而且有些也提供分类目录,但两者却有本质上的区别。
目录的资料库中,搜集保存的是各网站的站名、网址和内容提要;搜索引擎的资料库中,搜集保存的则是各网站的每一个网页的全部内容,范围要大得多。
搜索引擎是以全文检索的方式工作的。全文检索查到的结果不是站名、网址和内容提要,而是与你输入的关键词相关的一个个网页的地址和一小段文字。在这段文字中,可能没有你输入的那个关键词,它只是某一网页的第一段话,甚至是一段无法看懂的标记,但在这个网页中,一定有你所输入的那个关键词,或者相关的词汇。打个比方说,网站查询可以查到网上有哪些报纸,如《文汇报》、《大公报》,而全文检索则可以查到网上这些报纸的每一篇文章中的词汇。

3、两者相结合的搜索引擎

某些搜索引擎同时也提供目录。包含在搜索引擎中的目录通常质量比较高,也能从那里找到许多好站点。因为即使你把你的站点提交过去,也并不能保证一定被加到目录中去,他们把注意力放在那些已经在别的目录中存在的站点上,并有选择地寻找有吸引力的加到自己的目录中。
搜索引擎和目录各有各自不可替代的功用。目录比较简单,要想获得一个好的排列层次,除了你努力创建一个好内容的高品质站点外别无他法。搜索引擎复杂得多,它们随时都在自动地索引众多WEB站点的最新网页,所以常常会发现目录所不能得到的信息。如果你改动了你的页面,搜索引擎还随时会发现这个变化,并重新排列你在列表中的位置。而目录就做不到。下面专门讨论搜索引擎的工作原理以及如何提高在搜索引擎列表中的排列位置。

搜索引擎(search engines)是对互联网上的信息资源进行搜集整理,然后供你查询的系统,它包括信息搜集、信息整理和用户查询三部分。

搜索引擎是一个为你提供信息“检索”服务的网站,它使用某些程序把因特网上的所有信息归类以帮助人们在茫茫网海中搜寻到所需要的信息。

早期的搜索引擎是把因特网中的资源服务器的地址收集起来,由其提供的资源的类型不同而分成不同的目录,再一层层地进行分类。人们要找自己想要的信息可按他们的分类一层层进入,就能最后到达目的地,找到自己想要的信息。这其实是最原始的方式,只适用于因特网信息并不多的时候。随着因特网信息按几何式增长,出现了真正意义上的搜索引擎,这些搜索引擎知道网站上每一页的开始,随后搜索因特网上的所有超级链接,把代表超级链接的所有词汇放入一个数据库。这就是现在搜索引擎的原型。

随着yahoo!的出现,搜索引擎的发展也进入了黄金时代,相比以前其性能更加优越。现在的搜索引擎已经不只是单纯的搜索网页的信息了,它们已经变得更加综合化,完美化了。以搜索引擎权威yahoo!为例,从1995年3月由美籍华裔杨致远等人创办yahoo!开始,到现在,他们从一个单一的搜索引擎发展到现在有电子商务、新闻信息服务、个人免费电子信箱服务等多种网络服务,充分说明了搜索引擎的发展从单一到综合的过程。

然而由于搜索引擎的工作方式和因特网的快速发展,使其搜索的结果让人越来越不满意。例如,搜索“电脑”这个词汇,就可能有数百万页的结果。这是由于搜索引擎通过对网站的相关性来优化搜索结果,这种相关性又是由关键字在网站的位置、网站的名称、 标签等公式来决定的。这就是使搜索引擎搜索结果多而杂的原因。而搜索引擎中的数据库因为因特网的发展变化也必然包含了死链接。

怎样才能使搜索引擎精确地为人们提供相关的信息应该是它以后发展的方向,而不是只求综合服务。
搜索引擎指自动从英特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。英特网上的信息浩瀚万千,而且毫无秩序,所有的信息象汪洋上的一个个小岛,网页链接是这些小岛之间纵横交错的桥梁,而搜索引擎,则为你绘制一幅一目了然的信息地图,供你随时查阅。
搜索引擎的工作原理
搜索引擎的工作原理大致可以分为:
1、搜集信息:搜索引擎的信息搜集基本都是自动的。搜索引擎利用称为网络蜘蛛(spider)的自动搜索机器人程序来连上每一个网页上的超连结。机器人程序根据网页链到其他中的超链接,就象日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始,连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。

2、整理信息:搜索引擎整理信息的过程称为“建立索引”。搜索引擎不仅要保存搜集起来的信息,还要将它们按照一定的规则进行编排。这样,搜索引擎根本不用重新翻查它所有保存的信息而迅速找到所要的资料。想象一下,如果信息是不按任何规则地随意堆放在搜索引擎的数据库中,那么它每次找资料都得把整个资料库完全翻查一遍,如此一来再快的计算机系统也没有用。

3、接受查询:用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回资料。搜索引擎每时每刻都要接到来自大量用户的几乎是同时发出的查询,它按照每个用户的要求检查自己的索引,在极短时间内找到用户需要的资料,并返回给用户。目前,搜索引擎返回主要是以网页链接的形式提供的,这些通过这些链接,用户便能到达含有自己所需资料的网页。通常搜索引擎会在这些链接下提供一小段来自这些网页的摘要信息以帮助用户判断此网页是否含有自己需要的内容。

.

Ⅱ 怎么用java 开发一个搜索引擎呀

一.创建索引

1.一般创建索引的核心步骤

(1).创建索引写入对象IndexWriter:

IndexWriter indexWriter = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),create);

参数说明:INDEX_STORE_PATH:索引文件存放路径

new StandardAnalyzer():分词工具

create:此参数为Boolean型,true表示重新创建整个索引,false表示增量式创建索引。

(2).创建文档模型,并用IndexWriter对象写入

Document doc = new Document();

Field field1 = new Field(fieldName1, fieldValue ,Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field1);

Field field2 = new Field(fieldName2, fieldValue ,Field.Store.YES, Field.Index.TOKENIZED);

doc.add(field2);

……

indexWriter.addDocument(doc);

indexWriter.close();

参数说明:

Document:负责搜集数据源,它可以从不同的物理文件提取数据并放入同一个Document中或从一个物理文件中提取出不同的数据并放入同一个Document中。

如下图所示

二.搜索索引

1.lucene搜索的核心步骤:

String[]fields={“title”,“summary”,……};//要查找的field范围

BooleanClause.Occur[]flags={BooleanClause.Occur.SHOULD, BooleanClause.Occur.MUST ,……};

Queryquery = MultiFieldQueryParser.parse(queryStr, fields,flags,new StandardAnalyzer());

Hitshits=newIndexSearcher(INDEX_STORE_PATH).search(query);

for (int i = 0;i < hitsLength ; i++)

{

Document doc = hits.doc(i);

String title = doc.get(“title”);

String summary = doc.get(“summary”);

//搜索出来的结果高亮显示在页面上

if (title != null) {

TokenStream tokenStream = analyzer.tokenStream(“title”,new StringReader(title));

String highlighterValue = highlighter.getBestFragment(tokenStream, title) ;

if(highlighterValue != null){

title = highlighterValue ;

}

//log.info("SearchHelper.search.title="+title);

}

if(summary!= null){

TokenStream tokenStream = analyzer.tokenStream(“summary”,new StringReader(summary));

String highlighterValue = highlighter.getBestFragment(tokenStream, creator) ;

if(highlighterValue != null){

summary = highlighterValue ;

}

//log.info("SearchHelper.search. summary ="+ summary);

}

}

2.结合平台构造搜索模块

PageData类用来存放检索结果集数据。

PageInfo类用来存放页面相关信息例如,PageData对象集合、总记录个数、每一页的记录数、总页面数量等等。

SearchHelper用来充当整个搜索模块的对外接口。

三.为平台组件添加索引的步骤(以知识中心为例)

1.在com.cscec.oa.searchengine.extend.mole目录下添加一个新的package

例如:com.cscec.oa.searchengine.extend.mole.resourcestore

2.在新的目录下建立data package并建立相应的数据类,并使这个数据类继承BeanData。

例如:

package com.cscec.oa.searchengine.extend.mole.resourcestore.data

public class ResourceStoreBeanData extends BeanData{

}

3.与data package同一级目录建立manager package并建立相应管理类,并使这个管理类继承BeanDataManager

例如:

com.cscec.oa.searchengine.extend.mole.resourcestore.manager

public class extends BeanDataManager{

}

4.以管理员的身份登陆OA后,在菜单中找到“索引模块管理”链接,将相应信息添加完成后,便可以在List页面点击“创建索引”对该模块的数据进行索引的建立,建立完成后便可以进行查询。

Ⅲ 鍏充簬鎴戠敤java鍐欑殑缃戠珯锛岀栌搴︽悳绱㈠紩镎庣埇铏铡熺悊锛孲EO闂棰

1銆亀ww锛氭垜浠镄勪簰镵旂绣锛屼竴涓宸ㄥぇ镄勚佸嶆潅镄勪綋绯;
2銆佹悳闆嗗櫒锛氲繖涓鎴戜滑绔欓暱浠灏遍兘镡熸倝浜嗭纴鎴戜滑瀵瑰畠镄勪织绉颁篃灏辨槸铚樿洓锛岀埇铏锛岃屼粬镄勫伐浣滀换锷″氨鏄璁块梾椤甸溃锛屾姄鍙栭〉闱锛屽苟涓嬭浇椤甸溃;
3銆佹带鍒跺櫒锛氲湗铔涗笅杞戒笅𨱒ョ殑浼犵粰鎺у埗鍣锛屽姛鑳藉氨鏄璋冨害锛屾瘆濡傚叕浜ら泦锲㈢殑璋冨害瀹わ纴𨱒ユ带鍒跺彂杞︽椂闂达纴鐩镄勫湴锛屼富瑕佹潵鎺у埗铚樿洓镄勬姄鍙栭棿闅旓纴浠ュ强娲炬渶杩戠殑铚樿洓铡绘姄鍙栵纴鎴戜滑锅歋EO镄勫彲浠ユ兂鍒帮纴绌洪棿浣岖疆瀵笋EO浼桦寲鏄链夊埄镄勶绂
4銆佸师濮嬫暟鎹搴掳细瀛桦彇缃戦〉镄勬暟鎹搴掳纴灏辨槸铡熷嬫暟鎹搴撱傚瓨杩涘幓灏辨槸涓轰简涓嬩竴姝ョ殑宸ヤ綔锛屼互鍙婃彁渚涚栌搴﹀揩镦э纴鎴戜滑浼氩彂鐜帮纴璺烳D5鍊间竴镙风殑URL鏄涓嶉吨澶岖殑锛屾湁镄刄RL链変简锛屼絾镙囬桦氨鏄娌℃湁锛屽彧链夐氲繃URL杩欎釜缁勪欢𨱒ユ垒鍒帮纴锲犱负杩欎釜娌℃湁阃氲繃绱㈠紩鏁版嵁搴撴潵寤虹珛绱㈠紩銆傚师濮嬫暟鎹搴扑富瑕佸姛鑳芥槸瀛桦叆鍜岃诲彇镄勯熷害锛屼互鍙婂瓨鍙栫殑绌洪棿锛屼细阃氲繃铡嬬缉锛屼互鍙娄负钖庨溃鎻愪緵链嶅姟銆傜绣椤垫暟鎹搴撹皟搴︾▼搴忓皢铚樿洓鎶揿彇锲炴潵镄勭绣椤碉纴杩涜岀亩鍗旷殑鍒嗘瀽杩囧悗锛屼篃灏辨槸鎻愬彇浜哢RL锛岀亩鐩寸殑杩囨护闀滃儚钖庡瓨鍏ユ暟鎹褰扑腑锛岄偅涔埚湪浠栫殑鏁版嵁褰扑腑锛屾槸娌℃湁寤虹珛绱㈠紩镄勶绂
5銆佺绣椤靛垎鏋愭ā𨱒匡细杩欎竴鍧楅潪甯搁吨瑕侊纴seo浼桦寲镄勫瀮鍦剧绣椤点侀暅镀忕绣椤电殑杩囨护锛岀绣椤电殑𨱒冮吨璁$畻鍏ㄩ儴閮介泦涓鍦ㄨ繖涓鍧椼傜О涔嬩负缃戦〉𨱒冮吨绠楁硶锛屽嚑锏句釜閮戒笉姝锛
6銆佺储寮曞櫒锛氭妸链変环鍊肩殑缃戦〉瀛桦叆鍒扮储寮曟暟鎹搴掳纴鐩镄勫氨鏄镆ヨ㈢殑阃熷害镟村姞镄勫揩銆傛妸链変环鍊肩殑缃戦〉杞鎹㈠彟澶栦竴涓琛ㄧ幇褰㈠纺锛屾妸缃戦〉杞鎹涓哄叧阌璇嶃傚彨锅氭f帓绱㈠紩锛岃繖镙峰仛灏辨槸涓轰简渚垮埄锛岀绣椤垫湁澶氩皯涓锛屽叧阌璇嶆湁澶氩皯涓銆傚嚑锏句竾涓椤甸溃鍜屽嚑锏句竾涓璇嶅摢涓涓渚垮埄涓浜涖傚掓帓绱㈠紩鎶婂叧阌璇嶈浆鎹涓虹绣椤碉纴鎶婃帓钖岖殑𨱒′欢閮藉瓨鍙栧湪杩欎釜閲岄溃锛屽凡缁忓舰鎴愪竴楂樻晥瀛桦偍缁撴瀯锛屾妸寰埚氱殑鎺掑悕锲犵礌浣滀负涓涓椤瑰瓨鍌ㄥ湪杩欎釜閲岄溃锛屼竴涓璇嶅湪澶氩皯涓缃戦〉鍑虹幇锛堜竴涓缃戦〉寰埚氢釜鍏抽敭璇岖粍鎴愮殑锛屾妸缃戦〉鍙樻垚鍏抽敭璇嶈繖涔堜竴涓瀵瑰垪杩囩▼鍙锅氭f帓绱㈠紩銆傚缓璁绱㈠紩镄勫师锲狅细涓轰简渚垮埄锛屾彁楂樻晥鐜囥备竴涓璇嶅湪澶氩皯涓缃戦〉涓鍑虹幇锛屾妸璇嶅彉鎴愮绣椤佃繖涔堜竴涓瀵瑰垪杩囩▼鍙锅氩掓帓绱㈠紩銆傛悳绱㈢粨鏋滃氨鏄鍦ㄥ掓帓鏁版嵁搴撶亩鐩寸殑銮峰彇鏁版嵁锛屾妸寰埚氱殑鎺掑悕锲犵礌浣滀负涓涓椤癸纴瀛桦偍鍦ㄨ繖涓閲岄溃锛夛绂
7銆佺储寮曟暟鎹搴掳细灏嗘潵鐢ㄤ簬鎺掑悕镄勬暟鎹銆傚叧阌璇嶆暟閲忥纴鍏抽敭璇崭綅缃锛岀绣椤靛ぇ灏忥纴鍏抽敭璇岖壒寰佹爣绛撅纴鎸囧悜杩欎釜缃戦〉(鍐呴摼锛屽栭摼锛岄敋鏂囨湰)锛岀敤鎴蜂綋楠岃繖浜涙暟鎹鍏ㄩ儴閮藉瓨鍙栧湪杩欎釜閲岄溃锛屾彁渚涚粰妫绱㈠櫒銆备负浠涔堢栌搴﹁繖涔埚揩锛屽氨鏄锏惧害鐩存帴鍦ㄧ储寮曟暟鎹搴扑腑鎻愪緵鏁版嵁锛岃屼笉鏄鐩存帴璁块梾WWW銆备篃灏辨槸棰勫勭悊宸ヤ綔锛
8銆佹绱㈠櫒锛氩皢鐢ㄦ埛镆ヨ㈢殑璇嶏纴杩涜屽垎璇嶏纴鍐嶈繘琛屾帓搴忥纴阃氲繃鐢ㄤ笟鍐呮帴鍙f妸缁撴灉杩斿洖缁欑敤鎴枫傝礋璐e垏璇嶏纴鍒呜瘝锛屾煡璇锛屾牴鎹鎺掑悕锲犵礌杩涜屾暟鎹鎺掑簭锛
9銆佺敤鎴锋帴鍙o细灏嗘煡璇㈣板綍锛孖P锛屾椂闂达纴镣瑰嚮镄刄RL锛屼互鍙奤RL浣岖疆锛屼笂涓娆¤窡涓嬩竴娆$偣鍑荤殑闂撮殧镞堕棿瀛桦叆鍒扮敤鎴疯屼负镞ュ织鏁版嵁搴揿綋涓銆傚氨鏄锏惧害镄勯偅涓妗嗭纴涓涓鐢ㄦ埛镄勬帴鍙o绂
10銆佺敤鎴疯屼负镞ュ织鏁版嵁搴掳细鎼灭储寮曟搸镄勯吨镣癸纴SEO宸ュ叿鍜屽埛鎺掑悕镄勮蒋浠堕兘鏄浠庤繖涓閲岄溃寰楀嚭𨱒ョ殑銆傜敤鎴蜂娇鐢ㄦ悳绱㈠紩镎庣殑杩囩▼锛屽拰锷ㄤ綔锛
11銆佹棩蹇楀垎鏋愬櫒锛氶氲繃鐢ㄦ埛琛屼负镞ュ织鏁版嵁搴撹繘琛屼笉鏂镄勫垎鏋愶纴鎶婅繖浜涜屼负璁板綍瀛桦偍鍒扮储寮曞櫒褰扑腑锛岃繖浜涜屼负浼氩奖鍝嶆帓钖嶃备篃灏辨槸鎴戜滑镓璇寸殑鎭舵剰镣瑰嚮锛屾垨鏄涓澶沧帓钖嶃傦纸濡傛灉阃氲繃鍏抽敭镓句笉鍒帮纴闾d箞浼氱洿鎺ユ悳绱㈠烟钖嶏纴杩欎簺閮藉皢浼氲板叆鍒扮敤鎴疯屼负鏁版嵁搴揿綋涓锛夛绂
12銆佽瘝搴掳细缃戦〉鍒嗘瀽妯″潡涓镞ュ织鍒嗘瀽鍣ㄤ细鍙戠幇链鏂扮殑璇嶆眹瀛桦叆鍒拌瘝搴揿綋涓锛岄氲繃璇嶅簱杩涜屽垎璇嶏纴缃戦〉鍒嗘瀽妯″潡锘轰簬璇嶅簱镄勚
寮鸿皟锛氩仛seo浼桦寲锛屽仛镄勫氨鏄缁呜妭钬︹
鏂囩珷𨱒ヨ嚜锛www.seo811.com
娉锛氱浉鍏崇绣绔椤缓璁炬妧宸ч槄璇昏风Щ姝ュ埌寤虹珯鏁欑▼棰戦亾銆

Ⅳ 哪位朋友知道用java如何实现网络爬虫和搜索引擎的技术,说说原理最好附带代码 十分感谢 好的话可以追加分

heritrix抓取网页
网页解析的有很多就不说了,不过最好自己写
lucene索引

首先爬虫是需要一个处理器链的,网页的抓取并非几十行代码就能实现的,因为有很多问题出
现。
1.获取网页:判断网页编码,计算网页正文位置,获取页面内url(url的过滤、缓存、存储这部分还需要线程池的优化),url的分配、及线程池的启动。
2.网页持久化。网页解析,网页中样式表、图片等下载以及网页的保存(xml和html)网页快照的生成。
3.网页的消重去噪:去掉没用的网页,如果是垂直搜索引擎则需要更多的判断,可以利用内容模板和空间向量的算法实现。
4.索引的建立及优化,主要是简历倒排索引。

你的分类基本上可以用内容模板和空间向量计算实现。

还有其他很多东西,一时间不能说细了。你想做到什么程度。(比如:空间向量的算法及结果的参考值、网页内容模板的建立。)

阅读全文

与java搜索引擎实现相关的资料

热点内容
解压音乐排名 浏览:383
安卓手机浏览器怎么扫二维码 浏览:715
通达信成本均线源码 浏览:614
可以下载的解压音频 浏览:564
海贼王怎么换服务器 浏览:318
计算机上的共享文件夹映射 浏览:940
荣耀安装包在文件夹哪里 浏览:195
机票php源码 浏览:231
linux共享mac 浏览:922
中国没有国外的服务器地址 浏览:759
为什么退款服务器连接错误 浏览:557
android短信存储位置 浏览:972
unix网络编程卷4 浏览:808
找靓机app下单什么时候发货 浏览:413
android一个应用两个进程 浏览:803
linux硬盘复制 浏览:808
php图片服务器搭建 浏览:801
下载压缩文件怎么打开 浏览:194
新建文件夹叫什么名字 浏览:567
windows20的开机命令 浏览:335