導航:首頁 > 編程語言 > 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