欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于在數(shù)據(jù)庫搜索系統(tǒng)中識別相關(guān)搜索的方法和裝置的制作方法

文檔序號:6469046閱讀:184來源:國知局

專利名稱::用于在數(shù)據(jù)庫搜索系統(tǒng)中識別相關(guān)搜索的方法和裝置的制作方法
技術(shù)領(lǐng)域
:本發(fā)明文獻(xiàn)的公開部分包括屬于版權(quán)保護(hù)的資料。當(dāng)它出現(xiàn)在U.S專利商標(biāo)局專利文件或記錄中,版權(quán)人不反對任何人完全相同該專利文獻(xiàn)或?qū)@_,否則留所有版權(quán)。附上包含計(jì)算機(jī)程序源代碼的附錄。因此該附錄特地包含在此作為參考,以及包含屬于版權(quán)保護(hù)的如上所述的資料。
背景技術(shù)
:本發(fā)明通常涉及用于使用如一基于Internet的搜索引擎產(chǎn)生一搜索結(jié)果列表的方法和系統(tǒng)。更準(zhǔn)確地說,本發(fā)明涉及用于從一按業(yè)績付費(fèi)數(shù)據(jù)庫產(chǎn)生搜索結(jié)果以及從一相關(guān)的搜索數(shù)據(jù)庫產(chǎn)生相關(guān)搜索的一列表的方法和系統(tǒng)。搜索引擎通常被用來搜索計(jì)算機(jī)網(wǎng)絡(luò)如萬維網(wǎng)上可用的信息以允許用戶定位存儲在該網(wǎng)絡(luò)中的感興趣的信息。為使用一搜索引擎,一用戶或搜索者通常輸入搜索引擎用來產(chǎn)生一信息列表如網(wǎng)頁的一個或多個搜索項(xiàng),然后該搜索者能訪問和利用。由該搜索產(chǎn)生的信息通常被識別為在該信息和由用戶輸入的一個或多個搜索項(xiàng)間建立的一關(guān)聯(lián)的結(jié)果。不同的搜索引擎使用不同的技術(shù)來關(guān)聯(lián)信息和搜索項(xiàng)并識別相關(guān)的信息。這些搜索引擎也使用不同的技術(shù)來向用戶提供被識別的信息。因此,正被查找的信息的似然性作為一搜索的結(jié)果改變?nèi)Q于用來執(zhí)行該搜索的搜索引擎,這種不確定性是使萬維網(wǎng)上信息可用的網(wǎng)頁經(jīng)營商特別關(guān)心的。在這種設(shè)置,通常幾個網(wǎng)頁經(jīng)營商或廣告商競爭相同群體的可能的觀眾或用戶。因此,被標(biāo)識成一搜索結(jié)果的一網(wǎng)頁的能力對一網(wǎng)頁的成功來說通常是很重要的。因此,網(wǎng)頁經(jīng)營商通常試圖增加他們的網(wǎng)頁將被看成一搜索結(jié)果的似然性。使網(wǎng)頁經(jīng)營商具有被看成一搜索的結(jié)果的一種更能預(yù)測的方法的一種類型的搜索引擎是一種“按業(yè)績付費(fèi)”協(xié)議,其中至少部分基于廣告商或網(wǎng)頁經(jīng)營商同意付給該搜索引擎經(jīng)營商的貨幣總額顯示網(wǎng)頁。該網(wǎng)頁經(jīng)營商同意已付適量的貨幣,通常是指競買金額(bidamount),換得響應(yīng)一用戶輸入的一搜索項(xiàng)產(chǎn)生的一組搜索結(jié)果組中一特定的位置。一較高的競買金額將產(chǎn)生在該搜索結(jié)果組中一更突出的放置。因此,一網(wǎng)頁經(jīng)營者可試圖在一個或多個搜索項(xiàng)上出大價以增加對那個術(shù)語來說他們的網(wǎng)頁將被看成一搜索結(jié)果的似然性。然而,有多個相似的搜索項(xiàng),對一網(wǎng)頁經(jīng)營者來說在每個潛在地相關(guān)的搜索項(xiàng)上競買是困難的。同樣,一競買將在每個檢索術(shù)語上獲利也是不可能的。因此,一搜索引擎經(jīng)營者不能從使用沒有競買的某些搜索項(xiàng)執(zhí)行的搜索接收任何收入。另外,因?yàn)楝F(xiàn)有的網(wǎng)頁的數(shù)目是不斷增加的,對一用戶來說找到相關(guān)的搜索結(jié)果變得更困難。獲得相關(guān)的搜索結(jié)果的困難進(jìn)一步增加,因?yàn)樗阉饕媸且揽坑稍撚脩糨斎氲乃阉黜?xiàng)。一用戶接收的搜索結(jié)果直接地取決于該用戶輸入的搜索項(xiàng)。一搜索項(xiàng)的輸入不能導(dǎo)致關(guān)聯(lián)的搜索結(jié)果,但是僅一稍有不同的搜索項(xiàng)的輸入可以導(dǎo)致相應(yīng)的搜索結(jié)果。因此搜索項(xiàng)的選擇經(jīng)常是該搜索過程重要的一部分。這可能的對該搜索者和為該搜索者推薦相關(guān)的搜索的提供到該搜索引擎的該廣告商都有利。然而,當(dāng)前的搜索引擎不允許搜索引擎經(jīng)營者向一用戶提供相關(guān)的搜索項(xiàng),例如將會產(chǎn)生相應(yīng)的搜索結(jié)果的那些搜索項(xiàng)。需要克服這些缺陷的一系統(tǒng)。概述僅通過介紹,根據(jù)本發(fā)明的一實(shí)施例,接收來自一搜索者的一搜索請求并用來在一按業(yè)績付費(fèi)的數(shù)據(jù)庫上執(zhí)行一搜索。在該按業(yè)績付費(fèi)的數(shù)據(jù)庫中存儲有包括網(wǎng)頁定位器和由所列出的網(wǎng)頁的經(jīng)營者已付的競買金額的搜索列表。使用該按業(yè)績付費(fèi)的數(shù)據(jù)庫該搜索產(chǎn)生呈現(xiàn)給該搜索者的搜索結(jié)果。該搜索請求也被用來在一相關(guān)的搜索數(shù)據(jù)庫上執(zhí)行一搜索。至少部分地使用該按業(yè)績付費(fèi)的內(nèi)容,已經(jīng)形成該相關(guān)的搜索數(shù)據(jù)庫。該相關(guān)的搜索數(shù)據(jù)庫的搜索產(chǎn)生呈現(xiàn)給該搜索者的相關(guān)的搜索的一列表。根據(jù)一第二實(shí)施例,使用一按業(yè)績付費(fèi)數(shù)據(jù)庫創(chuàng)建一相關(guān)的搜索的數(shù)據(jù)庫。由該按業(yè)績付費(fèi)的數(shù)據(jù)庫引用的來自網(wǎng)頁的所有文字被存儲和用來產(chǎn)生一倒排索引。另外的索引被用來提高使用該數(shù)據(jù)庫獲得的關(guān)聯(lián)性和相關(guān)的搜索結(jié)果的分布。上述討論的本發(fā)明的說明性的實(shí)施例僅僅用介紹的方式提供。在本部分中不應(yīng)當(dāng)視為對定義本發(fā)明的范圍的下述權(quán)利要求的一限制。附圖的幾個視圖的簡要的描述圖1是結(jié)合一計(jì)算機(jī)網(wǎng)絡(luò)舉例說明一數(shù)據(jù)庫搜索系統(tǒng)的一方框圖;圖2是舉例說明用于操作圖1的數(shù)據(jù)庫搜索系統(tǒng)的一方法的流程圖;圖3是舉例說明用于操作圖1的數(shù)據(jù)庫搜索系統(tǒng)的一方法的流程圖;圖4是更詳細(xì)地舉例說明如圖2所示的該方法部分的流程圖;圖5是更詳細(xì)地舉例說明如圖2所示的該方法部分的流程圖;圖6是舉例說明用于形成一相關(guān)的搜索數(shù)據(jù)庫的一方法的流程圖;以及圖7是舉例說明用于從一數(shù)據(jù)庫刪除相似的頁面信息的一方法的流程圖。目前優(yōu)選實(shí)施例的詳細(xì)說明現(xiàn)在參考圖1,圖1是所示的結(jié)合一計(jì)算機(jī)網(wǎng)絡(luò)102的一數(shù)據(jù)庫搜索系統(tǒng)100的方框圖。該數(shù)據(jù)庫搜索系統(tǒng)100包括一按業(yè)績付費(fèi)數(shù)據(jù)庫104,一相關(guān)的搜索數(shù)據(jù)庫106,一搜索引擎網(wǎng)絡(luò)服務(wù)器108,一相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110以及一搜索引擎網(wǎng)頁114。服務(wù)器104,106,108可由一廣告商網(wǎng)絡(luò)服務(wù)器120或一客戶計(jì)算機(jī)122在該網(wǎng)絡(luò)102上訪問。在所舉例說明的實(shí)施例中該網(wǎng)絡(luò)102是Internet并根據(jù)適當(dāng)?shù)臉?biāo)準(zhǔn)例如網(wǎng)際協(xié)議提供數(shù)據(jù)通信。在其他的實(shí)施例中,其他的網(wǎng)絡(luò)系統(tǒng)可能被單獨(dú)的或結(jié)合Internet一起使用。在該網(wǎng)絡(luò)102中的通信最好按照網(wǎng)際協(xié)議或相似的數(shù)據(jù)通信標(biāo)準(zhǔn)。其他的數(shù)據(jù)通信標(biāo)準(zhǔn)也可能被使用來確保可靠的數(shù)據(jù)通信。數(shù)據(jù)庫搜索系統(tǒng)100被設(shè)置為一客戶機(jī)和服務(wù)器體系結(jié)構(gòu)的一部分。在一計(jì)算機(jī)網(wǎng)絡(luò)例如因特網(wǎng)的環(huán)境中,一客戶端程序是要求一服務(wù)的諸如一程序、任務(wù)或應(yīng)用的一過程,該服務(wù)是由諸如一程序、任務(wù)或應(yīng)用的另一過程提供的,該另一過程要求由稱為服務(wù)器程序的一另一過程提供的一服務(wù)。該客戶端程序使用所要求的服務(wù)而不必了解任何關(guān)于該另一個服務(wù)器程序或該服務(wù)器本身的工作細(xì)節(jié)。在網(wǎng)絡(luò)系統(tǒng)中,一客戶端程序通常在訪問由運(yùn)行一相應(yīng)的服務(wù)器進(jìn)程的另一計(jì)算機(jī)提供的共享網(wǎng)絡(luò)資源的一計(jì)算機(jī)之上運(yùn)行。一服務(wù)器典型的是在一通信媒介例如一網(wǎng)絡(luò)上可訪問的一遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。該服務(wù)器充當(dāng)用于一計(jì)算機(jī)網(wǎng)絡(luò)的一信息提供者。因此該系統(tǒng)100操作為用于由該客戶機(jī)例如客戶機(jī)122和該廣告商網(wǎng)絡(luò)服務(wù)器120訪問的服務(wù)器。客戶計(jì)算機(jī)122可以是常規(guī)的個人電腦,工作站或任何大小的計(jì)算機(jī)系統(tǒng)。每個客戶計(jì)算機(jī)112典型的包括一個或多個處理器,存儲器,輸入輸出裝置以及一網(wǎng)絡(luò)接口例如一調(diào)制解調(diào)器。該廣告商網(wǎng)絡(luò)服務(wù)器120,該搜索引擎網(wǎng)絡(luò)服務(wù)器108,該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110以及該帳戶管理網(wǎng)絡(luò)服務(wù)器112可以被相似地配置。然而,該廣告商網(wǎng)絡(luò)服務(wù)器120,該搜索引擎網(wǎng)絡(luò)服務(wù)器108,該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110以及該帳戶管理網(wǎng)絡(luò)服務(wù)器112每個可包括由一單獨(dú)的專用網(wǎng)連接的多個計(jì)算機(jī)。該客戶計(jì)算機(jī)112執(zhí)行一萬維網(wǎng)(″網(wǎng)絡(luò)″)瀏覽器程序124。這種程序例子是可以從NetscapeCommunicationsCorporation獲得的Navigator以及可以從微軟公司獲得的InternetExplorer。該瀏覽器程序124經(jīng)由一用戶使用來輸入將被檢索的特殊的網(wǎng)頁的地址。這些地址被稱為統(tǒng)一資源定位器(URLs)。另外,只要檢索到一頁面,該瀏覽器程序124可以提供當(dāng)該用戶點(diǎn)擊包含在該網(wǎng)頁中的其他網(wǎng)頁的超鏈接時對其他頁或記錄的訪問。這種超鏈接提供一自動方式用于該用戶輸入另一頁的URL并檢索那頁。這些頁可以是包括如內(nèi)容簡單的文字信息或更復(fù)雜的數(shù)字編碼的多媒體內(nèi)容例如軟件程序,圖形,聲頻數(shù)據(jù),視頻數(shù)據(jù)等等的數(shù)據(jù)記錄。客戶計(jì)算機(jī)122通過該網(wǎng)絡(luò)102與不同的網(wǎng)絡(luò)信息提供者通信。這些信息提供者包括該廣告商網(wǎng)絡(luò)服務(wù)器120、該帳戶管理服務(wù)器112、該搜索引擎服務(wù)器108、以及相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110。最好,通信功能性是由超級文字傳輸協(xié)議(HTTP)提供,盡管可使用其他的通信協(xié)議如FTP,SNMP,Telnet以及在本領(lǐng)域公知的其他的協(xié)議。最好,搜索引擎服務(wù)器108,相關(guān)的搜索服務(wù)器110以及帳戶管理服務(wù)器112,以及廣告商服務(wù)器120位于萬維網(wǎng)上。U.S.專利申請?zhí)?9/322,627,1999年5月29日申請,名為“SystemandMethodforInfluencingaPositiononaSearchResultListGeneratedbyaComputerNetworkSearchEngine″,以及U.S.專利申請?zhí)?9/494,818,2000年1月31日申請,名為″MethodandSystemforGeneratingaSetofSearchTerms″均被授予本申請的受讓人以及在此合并作為參考。這些申請公開了搜索引擎系統(tǒng)的其他的方面。在該舉例說明的實(shí)施例中的帳戶管理網(wǎng)絡(luò)服務(wù)器112包括一計(jì)算機(jī)存儲器介質(zhì)例如一磁碟片系統(tǒng)以及一處理系統(tǒng)。一數(shù)據(jù)庫被存儲在該存儲介質(zhì)上并且包含廣告商的賬戶信息。運(yùn)行在客戶計(jì)算機(jī)122上的常規(guī)的瀏覽器程序124可能被用來訪問存儲在該帳戶管理服務(wù)器112上的廣告商賬戶信息。該搜索引擎網(wǎng)絡(luò)服務(wù)器108在定位到該搜索引擎網(wǎng)絡(luò)服務(wù)器URL或在能通過一瀏覽器程序124向該搜索引擎網(wǎng)絡(luò)服務(wù)器148提交查詢的其他網(wǎng)絡(luò)服務(wù)器的站點(diǎn)的基礎(chǔ)上允許網(wǎng)絡(luò)用戶鍵入關(guān)鍵詞查詢來在網(wǎng)頁上的上百萬的可用的頁中識別感興趣的頁。在本發(fā)明的一實(shí)施例中,搜索引擎網(wǎng)絡(luò)服務(wù)器108產(chǎn)生至少部分地包括從由該帳戶管理服務(wù)器112實(shí)施的競買進(jìn)程的結(jié)果獲得的并格式化的相應(yīng)的輸入的一搜索結(jié)果列表。該搜索引擎網(wǎng)絡(luò)服務(wù)器108對包含與由該用戶在一客戶計(jì)算機(jī)122輸入的搜索項(xiàng)有關(guān)的信息的文檔產(chǎn)生一超文字鏈接列表。該搜索引擎網(wǎng)絡(luò)服務(wù)器將該列表用一網(wǎng)頁114的形式傳送給該網(wǎng)絡(luò)用戶,在運(yùn)行在該客戶計(jì)算機(jī)122上的瀏覽器124上顯示它。該搜索引擎網(wǎng)絡(luò)服務(wù)器的一實(shí)施例可通過定位到在URLhttp//www.goto.com/的網(wǎng)頁被找到。搜索引擎網(wǎng)絡(luò)服務(wù)器108被連接到該網(wǎng)絡(luò)102。在本發(fā)明的一個實(shí)施例中,搜索引擎網(wǎng)絡(luò)服務(wù)器108包括包含多個搜索列表的一按業(yè)績付費(fèi)數(shù)據(jù)庫。該數(shù)據(jù)庫104包含用來產(chǎn)生響應(yīng)用戶查詢的搜索結(jié)果的搜索列表記錄的有序的集合。每個搜索列表記錄包含一相關(guān)的網(wǎng)頁或文檔、一標(biāo)題、敘述性的文字和一競買金額的URL。另外,搜索引擎網(wǎng)絡(luò)服務(wù)器108也可被連接到該帳戶管理服務(wù)器112。該帳戶管理服務(wù)器112也可被連接到該網(wǎng)絡(luò)102。另外,在圖1的舉例說明的實(shí)施例中,該數(shù)據(jù)庫系統(tǒng)100進(jìn)一步包括一相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110和一關(guān)聯(lián)的相關(guān)的搜索數(shù)據(jù)庫106。該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110和數(shù)據(jù)庫106用來向一搜索者提供建議的、相關(guān)的搜索以及響應(yīng)他的查詢的搜索結(jié)果。使用一搜索引擎網(wǎng)絡(luò)服務(wù)器例如服務(wù)器108實(shí)施搜索信息的用戶經(jīng)常執(zhí)行同該網(wǎng)絡(luò)站點(diǎn)搜索引擎的索引數(shù)據(jù)相比被不適當(dāng)?shù)鼐劢顾阉?。用戶可使用或含糊和概括如一″音樂″或太具體和集中如″在1950s前期間來自NewOrleans的熱情的爵士樂”的搜索項(xiàng)。一些用戶要求幫助來精煉他們的查詢以便從該搜索引擎更好的獲得有用信息。該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110向該用戶提供非常適合于該按業(yè)績付費(fèi)數(shù)據(jù)庫104的性能的查詢建議。在該舉例說明的實(shí)施例中,該按業(yè)績付費(fèi)數(shù)據(jù)庫104結(jié)合經(jīng)營網(wǎng)絡(luò)服務(wù)器例如廣告商網(wǎng)絡(luò)服務(wù)器120的廣告商被建立。廣告商網(wǎng)頁121被顯示在該廣告商網(wǎng)絡(luò)服務(wù)器120上。一廣告商或網(wǎng)絡(luò)站點(diǎn)創(chuàng)辦人通過駐留在該帳戶管理服務(wù)器112上的一賬戶與其他的廣告商參予一競標(biāo)進(jìn)程。一廣告商可競買多個與該廣告商網(wǎng)絡(luò)站點(diǎn)的內(nèi)容有關(guān)的搜索項(xiàng)。通過該網(wǎng)絡(luò)站點(diǎn)創(chuàng)辦人提交的競買用來控制向使用客戶計(jì)算機(jī)122的一搜索者提出的搜索結(jié)果。當(dāng)使用由該廣告商競買的該搜索項(xiàng)的一搜索被執(zhí)行時較高的競買在由該搜索引擎網(wǎng)絡(luò)服務(wù)器108產(chǎn)生的一搜索結(jié)果列表上得到更有利的位置。在一實(shí)施例中,由一廣告商競買的金額包括每當(dāng)經(jīng)在該搜索結(jié)果列表頁上的一超鏈接訪問該廣告商網(wǎng)絡(luò)站點(diǎn)時從該廣告商的賬戶扣除的一貨幣金額。一搜索者用一計(jì)算機(jī)輸入裝置如一鼠標(biāo)點(diǎn)擊該超鏈接來啟動一檢索請求以便檢索與該廣告商的超鏈接有關(guān)的信息。最好,每次訪問或點(diǎn)擊一搜索結(jié)果列表超鏈接被重定向到該搜索引擎網(wǎng)絡(luò)服務(wù)器108來將該點(diǎn)擊同用于一廣告商的該賬戶標(biāo)識符關(guān)聯(lián)。對搜索者來說不是顯而易見的這個重定向作用在訪問該廣告商的URL前使用由該搜索者點(diǎn)擊的該搜索結(jié)果列表超鏈接將訪問編碼成該搜索結(jié)果頁的賬戶信息。在該舉例說明的實(shí)施例中,在該搜索結(jié)果列表頁上的該廣告商的網(wǎng)絡(luò)站點(diǎn)說明和超鏈接附有該廣告商的列表是一已付表的一指示。每個已付表顯示與對每次通過該搜索結(jié)果列表介紹到該廣告商站點(diǎn)的每次點(diǎn)擊由該廣告商應(yīng)付的一價格一致的一金額。該搜索者可點(diǎn)擊與那個搜索結(jié)果頁中的每個列表有關(guān)的超級文字連接來訪問該相應(yīng)的網(wǎng)頁。該超級文字連接可在該因特網(wǎng)上的任何地方訪問網(wǎng)頁,以及包括對位于該廣告商網(wǎng)絡(luò)服務(wù)器120上的廣告商網(wǎng)頁的已付表。在本發(fā)明的一實(shí)施例中,該搜索結(jié)果列表也包括不是按廣告商的競買結(jié)果定價的并且由一常規(guī)的搜索引擎如Inktomi、Lycos、或Yahoor搜索引擎產(chǎn)生的不付費(fèi)表。不付費(fèi)超級文字連接也可包括由一編輯組(editorialteam)手動索引到該按業(yè)績付費(fèi)數(shù)據(jù)庫104的鏈接。最好,該不付費(fèi)表在該搜索結(jié)果頁上的該已付廣告商列表之后。相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110從在客戶計(jì)算機(jī)122的搜索者接收使用該搜索引擎網(wǎng)頁114輸入的搜索請求。該相關(guān)的搜索數(shù)據(jù)庫106中,包括從該按業(yè)績付費(fèi)數(shù)據(jù)庫104產(chǎn)生的相關(guān)的搜索列表,該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110識別與該搜索請求關(guān)聯(lián)的相關(guān)的搜索列表。結(jié)合該搜索引擎網(wǎng)絡(luò)服務(wù)器108,該相關(guān)的網(wǎng)絡(luò)服務(wù)器110返回包括位于該按業(yè)績付費(fèi)數(shù)據(jù)庫中的所識別的搜索列表以及位于該相關(guān)的搜索數(shù)據(jù)庫106中的一個或多個所識別的相關(guān)的搜索列表的一搜索結(jié)果列表給該搜索者。該相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器110連同相關(guān)的搜索數(shù)據(jù)庫的操作將結(jié)合圖2-5在下面描述。該相關(guān)的搜索數(shù)據(jù)庫106的形成將結(jié)合圖6描述如下。圖2是舉例說明用于操作圖1的數(shù)據(jù)庫搜索系統(tǒng)100的一方法的流程圖。該方法從塊200開始。stepsdescribedhereinisincludedasanappendix.在此描述的用于實(shí)現(xiàn)圖2的方法的Java源代碼及其他方法步驟被包括作為一附錄。在塊202,一搜索請求被接收。該搜索請求可用任何適當(dāng)?shù)姆椒ń邮铡O胂笠凰阉髡埱髮⒂墒褂靡豢蛻粲?jì)算機(jī)的一搜索者發(fā)起來訪問實(shí)現(xiàn)如圖2所示的方法的該數(shù)據(jù)庫系統(tǒng)的搜索引擎網(wǎng)頁。一搜索請求可被鍵入作為在一超文字鏈接點(diǎn)擊中的輸入文字來啟動該搜索請求和搜索過程。在塊202后,兩個平行的過程被啟動。在塊204,該數(shù)據(jù)庫搜索系統(tǒng)的搜索引擎網(wǎng)絡(luò)服務(wù)器在該系統(tǒng)的按業(yè)績付費(fèi)的數(shù)據(jù)庫中識別匹配的搜索列表。另外,該搜索引擎網(wǎng)絡(luò)服務(wù)器可進(jìn)一步識別不付費(fèi)的搜索列表。同樣,在塊206,一相關(guān)的搜索網(wǎng)絡(luò)服務(wù)器啟動一搜索來在該相關(guān)的搜索數(shù)據(jù)庫中識別匹配的相關(guān)的搜索列表。通過匹配搜索列表,表示各個搜索引擎識別包含在各個數(shù)據(jù)庫中的搜索列表,這產(chǎn)生與該搜索請求的一匹配。如果用于字母原文匹配的一精確的、字母在一競買的關(guān)鍵詞和一搜索項(xiàng)間產(chǎn)生,可產(chǎn)生一匹配。在其他實(shí)施例中,如果一競買的關(guān)鍵詞與一搜索項(xiàng)具有預(yù)定的關(guān)系,可產(chǎn)生一匹配。例如,該預(yù)定的關(guān)系可包括匹配已經(jīng)去除后綴的一詞根;在一多個詞查詢中,匹配幾個但不是所有詞,或用預(yù)定數(shù)量的詞的接近度定位該多個詞的查詢。如果已經(jīng)定位搜索結(jié)果,在塊208,來自按業(yè)績付費(fèi)數(shù)據(jù)庫的搜索結(jié)果與來自相關(guān)搜索數(shù)據(jù)庫的搜索結(jié)果結(jié)合。在塊210,一搜索結(jié)果列表被返回給該搜索者,例如通過在該搜索引擎網(wǎng)頁上顯示識別后的搜索列表并在該網(wǎng)絡(luò)上將該網(wǎng)頁數(shù)據(jù)傳送到該客戶計(jì)算機(jī)。該搜索結(jié)果和相關(guān)的搜索結(jié)果可用任何常規(guī)的方式顯示。用在本發(fā)明的一個實(shí)施例中的一搜索結(jié)果列表顯示的例子如圖3所示,其是由對術(shù)語“CD寫入器(CDburner)”的搜索得出的開頭的幾個輸入項(xiàng)的顯示。圖3的示例性的顯示表示包括多個輸入310a、310b、310c、310d、310e、310f、310g、310h、310i的一搜索結(jié)果列表部分、其他搜索類別(searchcategory)的一列表312以及一相關(guān)的搜索列表314。如圖3所示,一單個輸入,如在該搜索結(jié)果列表中的輸入310a包括該網(wǎng)絡(luò)站點(diǎn)的一說明320,最好包括一標(biāo)題和一短的文字的說明以及一超鏈接330,當(dāng)該超鏈接被一搜索者點(diǎn)擊時,將該搜索者瀏覽器引導(dǎo)到該描述的網(wǎng)絡(luò)站點(diǎn)所處的URL。該URL340也可以在該搜索結(jié)果列表輸入310a顯示,如圖3所示。當(dāng)瀏覽圖3的搜索結(jié)果項(xiàng)顯示310的遠(yuǎn)程搜索者選擇或點(diǎn)擊該搜索結(jié)果項(xiàng)顯示310的超鏈接330時,該搜索結(jié)果項(xiàng)的“點(diǎn)擊”發(fā)生。搜索結(jié)果列表輸入310a-310h也表示該廣告商的搜索列表的等級值360a、360b、360c、360d、360e、360f、360g、360h、360i。該等級值360a-360i是一序數(shù)值,最好是由該搜索引擎網(wǎng)絡(luò)服務(wù)器的處理系統(tǒng)產(chǎn)生并指定給該搜索列表的一數(shù)字。最好,該等級值360a-360i是用軟件實(shí)現(xiàn)的在該競買金額、等級和一搜索列表的搜索項(xiàng)間建立一關(guān)聯(lián)的一過程中被指定。該過程收集匹配一特定的搜索項(xiàng)的所有的搜索列表、按從最高到最低競買金額對搜索列表排序,并按順序?qū)γ總€搜索列表指定一等級值。最高競買金額得到最高的等級值,第二最高的競買金額得到第二最高的等級值,直到獲得最低等級值的最低競買金額。等級值與競買金額間的關(guān)聯(lián)如圖3中所示,每個已付的搜索列表輸入310a-310h顯示用于那個輸入的廣告商的競買金額350a、350b、350c、350d、350e、350f、350g、350h、350i。如果具有相同搜索項(xiàng)的兩個搜索列表也具有相同的競買金額,在時間上先接收的競買將被指定較高的等級值。圖3的搜索結(jié)果列表不包括不付費(fèi)的列表。在優(yōu)選實(shí)施例中,不付費(fèi)列表不顯示一競買金額以及在最低等級的已付列表之后顯示。由利用對象分布數(shù)據(jù)庫和本領(lǐng)域公知的文字搜索算法的一搜索引擎產(chǎn)生不付費(fèi)的列表。這樣一種搜索引擎的例子是由InktomiCorporation運(yùn)作的搜索引擎。由該遠(yuǎn)程的搜索者輸入的最初的搜索查詢被用來通過該常規(guī)的搜索引擎生成不付費(fèi)的列表。該列表312的其他搜索種類表示用于搜索可能與該搜索者的輸入搜索項(xiàng)316相關(guān)的其他可能的種類。其他的搜索種類被選擇用于通過識別一組如包含該輸入搜索項(xiàng)316中的計(jì)算機(jī)硬件顯示。然后在該組中的種類被顯示為可由該搜索者點(diǎn)擊用于另外的搜索的超鏈接。這提高了該用戶的輸入搜索不能找到適當(dāng)?shù)乃阉鹘Y(jié)果的情況下的用戶的方便。該相關(guān)的搜索列表314顯示使用在此描述的相關(guān)的搜索數(shù)據(jù)庫確定的相關(guān)的搜索的6個輸入318。在其他實(shí)施例中,可顯示其他的相關(guān)搜索輸入的數(shù)量。另外,標(biāo)記為“更多”的一鏈接320允許用戶顯示另外的相關(guān)的搜索輸入。在舉例說明的實(shí)施例中所顯示的輸入318是在該相關(guān)的搜索數(shù)據(jù)庫中最上面的六個最相關(guān)和競買最多的術(shù)語?,F(xiàn)在參考圖4,在一個實(shí)施例中識別在一相關(guān)的搜索數(shù)據(jù)庫中匹配的相關(guān)的搜索列表的動作(圖2,動作206)包括以下動作。在塊400,包含來自包含在該數(shù)據(jù)庫搜索系統(tǒng)的按業(yè)績付費(fèi)數(shù)據(jù)庫中的所有網(wǎng)頁的所有數(shù)據(jù)的一倒排索引被搜索。該倒排索引被存儲在相關(guān)的搜索數(shù)據(jù)庫中。在一倒排索引中,一單個的索引輸入被用來參考多個數(shù)據(jù)庫記錄。查找每個索引輸入的多個匹配當(dāng)使用倒排索引時通常會更快,因?yàn)槊總€索引輸入可引用多個數(shù)據(jù)庫記錄。該倒排索引列舉可按如字母順序搜索的詞以及附有的每個詞是識別包含該詞和在每個文檔中出現(xiàn)該詞的位置的特定的文檔的指針。為執(zhí)行一搜索,代替用詞的順序搜索完這些文檔,該計(jì)算機(jī)定位用于在一搜索查詢中識別的特定詞的指針并處理它們。該計(jì)算機(jī)識別具有對該搜索查詢術(shù)語來說所要求的順序以及接近關(guān)系的文檔。在塊402,也為所接收的搜索項(xiàng)搜索元信息。元信息是抽象的,刪除有關(guān)所接收的數(shù)據(jù)本身的一次性移出的信息并形成該數(shù)據(jù)的一說明。元信息是從信息和相關(guān)的信息導(dǎo)出的。用于一列表的元信息描述該列表與其他列表的關(guān)系,以及用于一列表的元信息描述主辦一列表的廣告商與其他廣告商之間的關(guān)系。使用命令的腳本來獲得元信息以分析該按業(yè)績付費(fèi)數(shù)據(jù)庫并確定在該數(shù)據(jù)中出現(xiàn)的信息和關(guān)系。在該數(shù)據(jù)庫中收集用于每行的數(shù)據(jù)的元信息并將其加到那行上。在一個實(shí)施例中,在該數(shù)據(jù)被收集在該數(shù)據(jù)庫中后,該腳本按一批處理運(yùn)行一次。在其他實(shí)施例中,該腳本被定期地重新運(yùn)行以更新元信息。包含在按業(yè)績付費(fèi)數(shù)據(jù)庫中的有關(guān)網(wǎng)頁的元信息和關(guān)鍵詞包括諸如在不同網(wǎng)頁域中相似關(guān)鍵詞出現(xiàn)的頻率以及與一單個的網(wǎng)頁相關(guān)的不同關(guān)鍵詞的數(shù)據(jù)的信息。該元信息可進(jìn)一步包括包含在由在該按業(yè)績付費(fèi)數(shù)據(jù)庫具有競買的搜索項(xiàng)的網(wǎng)頁創(chuàng)辦人提供的每個搜索列表中的信息、廣告商標(biāo)識信息、網(wǎng)絡(luò)站點(diǎn)主題如賭博或成人內(nèi)容、以及導(dǎo)出的主題的字段型的廣告商數(shù)據(jù)。最好,在塊400,該元信息用一普通的倒排索引與所搜索的所存儲的網(wǎng)頁數(shù)據(jù)結(jié)合。塊400和塊402的搜索結(jié)果是該倒排索引或包含所搜索的信息索引的行的一列表。每行包含與該按業(yè)績付費(fèi)數(shù)據(jù)庫的一搜索列表相關(guān)的信息以及與該搜索列表相關(guān)的網(wǎng)頁的所有文字。在舉例說明的實(shí)施例中,搜索列表包括該廣告商的搜索項(xiàng)、該網(wǎng)頁的URL、一標(biāo)題以及描述性的文字。在塊404,返回的相關(guān)的搜索結(jié)果按關(guān)聯(lián)排序??墒褂萌魏芜m當(dāng)?shù)呐判蚶獭0搓P(guān)聯(lián)排序搜索結(jié)果的最好的處理在圖5中更詳細(xì)地說明。在塊406,可提供六個最相關(guān)的有關(guān)的搜索結(jié)果。注意可提供任何適當(dāng)?shù)乃阉鹘Y(jié)果數(shù)量。建議一搜索者選擇提供六個有關(guān)的搜索是任意的。在塊406后,控制進(jìn)行到圖2的塊208。圖5是說明用于按關(guān)聯(lián)排序從一相關(guān)的搜索數(shù)據(jù)庫獲得的搜索結(jié)果的方法的流程圖,對應(yīng)于圖4的塊404。在如圖5所述的實(shí)施例中,用于每個返回的列表的一關(guān)聯(lián)值被保持。該關(guān)聯(lián)值根據(jù)在圖5中定義的一些特定的關(guān)聯(lián)因素被調(diào)整。也可使用其他關(guān)聯(lián)因素。在調(diào)整該關(guān)聯(lián)值后,產(chǎn)生一最終的排序并且最高值的列表被返回。在塊500,根據(jù)在每個各自的記錄中一查詢的搜索項(xiàng)出現(xiàn)的頻率,在搜索過程中用于個別記錄的關(guān)聯(lián)值增加(塊400、402,圖4)。例如,如果所查詢的搜索項(xiàng)在與該搜索列表相關(guān)的文字中頻繁地出現(xiàn),那個列表的關(guān)聯(lián)則增加。如果查詢的搜索項(xiàng)在該列表中很少或根本不出現(xiàn),則那個列表的關(guān)聯(lián)值不增加或減小。在塊502,確定在由該搜索者提交的搜索查詢中是否有多個搜索項(xiàng)。如果不是,控制進(jìn)入塊506。如果有多個搜索項(xiàng),在塊504,個別搜索結(jié)果的關(guān)聯(lián)根據(jù)在一定位的記錄中的近似的搜索項(xiàng)增加。因此,如果兩個搜索項(xiàng)是直接最接近的,可實(shí)際上增加用于那個記錄的關(guān)聯(lián)比數(shù)值,建議所識別的搜索列表對由該搜索者提交的搜索查詢來說很相關(guān)。另一方面,如果兩個搜索項(xiàng)出現(xiàn)如在一相同的句子中但不是很接近,該記錄的關(guān)聯(lián)可稍微增加以表示由搜索項(xiàng)的降低的接近暗示的較低的關(guān)聯(lián)。在塊506,確定所定位的記錄是否包含一競買的搜索項(xiàng)。搜索項(xiàng)是由廣告商競買的,該競買被用來由使用按業(yè)績付費(fèi)的搜索引擎網(wǎng)絡(luò)服務(wù)器顯示搜索結(jié)果。如果搜索結(jié)果的確包括一競買的搜索項(xiàng),該記錄的關(guān)聯(lián)被調(diào)整,塊508。如果查詢不包括一個或多個競買的搜索項(xiàng),控制進(jìn)入塊510。在塊510,確定在搜索列表的說明中是否有搜索項(xiàng)。如圖3所述,每個那樣的列表包括與該搜索列表的網(wǎng)絡(luò)站點(diǎn)的內(nèi)容的文字性說明。如果搜索項(xiàng)沒有包括在說明中,控制進(jìn)入到塊514。如果搜索項(xiàng)包括在該說明中,在塊512,所定位的記錄的關(guān)聯(lián)被相應(yīng)地調(diào)整。在塊514,確定搜索項(xiàng)是否定位在搜索列表的標(biāo)題中。如圖3所示,每個搜索列表包括一標(biāo)題360。如果搜索項(xiàng)包括在一記錄的標(biāo)題中,在塊516,該記錄的關(guān)聯(lián)被相應(yīng)地調(diào)整。如果搜索項(xiàng)沒有包括在該標(biāo)題中,控制進(jìn)入塊518。在塊518,確定搜索項(xiàng)是否包括在搜索列表的元標(biāo)簽中。元標(biāo)簽是包括在對用戶使用來說不顯示的一網(wǎng)絡(luò)站點(diǎn)中的文字性信息。然而,包含在按業(yè)績付費(fèi)數(shù)據(jù)庫中的搜索列表包括用于搜索和其他目的的元標(biāo)簽。在塊518,如果搜索項(xiàng)沒有包括在搜索列表中,控制進(jìn)入塊522。另一方面,如果搜索項(xiàng)包括在一個或多個搜索列表的元標(biāo)簽中,在塊520,該記錄的關(guān)聯(lián)被相應(yīng)的調(diào)整。在塊522,確定用戶的搜索項(xiàng)是否包括在競買的網(wǎng)頁的文字中。如果沒有,控制進(jìn)入塊406,圖4。然而,如果搜索項(xiàng)包括在該網(wǎng)頁的文字中,在塊524,該搜索列表記錄的關(guān)聯(lián)被相應(yīng)地調(diào)整。在圖5中所述的步驟之后,一個或多個以及最好是六個最相關(guān)的有關(guān)的搜索列表被返回并連同來自該按業(yè)績付費(fèi)數(shù)據(jù)庫的搜索結(jié)果顯示給該搜索者。圖6說明用于形成用在圖1的數(shù)據(jù)庫搜索系統(tǒng)中的一相關(guān)的搜索數(shù)據(jù)庫的一種方法。該方法從塊600開始。在塊602,提取用于在按業(yè)績付費(fèi)數(shù)據(jù)庫中所有網(wǎng)頁的所有文字。包括元標(biāo)簽和包含由一URL引用的該網(wǎng)頁中的其他未顯示的文字信息,該URL包含在按業(yè)績付費(fèi)數(shù)據(jù)庫中。在塊604,來自相似的頁的文字被省略。這減少必須被處理的數(shù)據(jù)的總量以形成相關(guān)的搜索數(shù)據(jù)庫。用于執(zhí)行該動作的一個方法的一實(shí)施例將結(jié)合圖7在下面描述。另外,這大大地增加了產(chǎn)生相關(guān)的搜索數(shù)據(jù)庫的速度。在塊606,該文字被存儲在相關(guān)的搜索數(shù)據(jù)庫中。在塊608,創(chuàng)建一倒排索引,索引在塊606中存儲的搜索列表數(shù)據(jù)以及在塊602提取的文字。最后得到的倒排索引包括多行數(shù)據(jù),每行包括一關(guān)鍵詞以及來自與那個關(guān)鍵詞有磁的數(shù)據(jù)庫的所有文字。用于相關(guān)搜索數(shù)據(jù)庫的內(nèi)容的一結(jié)構(gòu)的一說明性例子如下。該數(shù)據(jù)庫的每行包括以下的部分canon_ontinteger#有關(guān)該搜索結(jié)果競買的不同的搜索列表數(shù)量advertiser_cntinteger#有關(guān)該搜索結(jié)果競買的不同的廣商的數(shù)量related_resultvarchar(50)#相關(guān)結(jié)果(競買的搜索項(xiàng)),規(guī)范和單數(shù)(canonicalizedanddepluralized)rawsearchtextvarchar(50)#初始行競買的搜索項(xiàng)advertiser_idsvarchar(4096)#對該搜索結(jié)果競買的所有廣告商的須直接付款的列表(explicitlist)wordsvarchar(65536+)#搜索(crawl)過的所有網(wǎng)頁的全文,包括手工編碼的腳本themevarchar(50)directory_taxonomyvarchar(200)數(shù)canon_cnt與數(shù)advertiser_cnt不同,因?yàn)樵诓煌蛑械亩鄠€不同的網(wǎng)頁可競買(bidagainst)相同的競買的搜索項(xiàng),或多個不同的廣告商可僅競買一條搜索項(xiàng)。特定主題的關(guān)鍵詞被包含在具有插入在advertiser_cnt字段中的“標(biāo)記”的數(shù)據(jù)庫中。如果“advertiser_cnt=999999999”,所出現(xiàn)的查詢是一面向成人的查詢。在該實(shí)施方式中,一可選的提高是禁止在該情況下相關(guān)的結(jié)果。數(shù)canon_cnt和advertiser_cnt是當(dāng)前導(dǎo)出的數(shù)據(jù)字段。另外的字段如theme和directory_taxonomy_category能任意地添加以給出更多提高的關(guān)聯(lián)給相關(guān)結(jié)果匹配,盡管他們在所說明的實(shí)施例中并沒有使用。在一個實(shí)施例中,被查詢來獲得相關(guān)的結(jié)果的倒排索引用以下Java命令創(chuàng)建SQL&gt;Createmetamorphinvertedindexindex02onlinead02(words);這是用于在一文檔(在這里,該文檔包含在將通過TexisThunderstoneSQL命令從(RelatedSearcherCore.java)被搜索的一數(shù)據(jù)庫列(詞))上創(chuàng)建一任何的文字搜索索引(mm_index02)的廠商認(rèn)證(vendorspecific)方法(使用Thunderstone-EPI,Inc.提供的Texis關(guān)系數(shù)據(jù)庫管理系統(tǒng))<prelisting-type="program-listing"><![CDATA[  ″SELECT″  +″$rank,″//NumgetRow()argposition0  +canoncnt,″//IntgetRow()argposition1  +″raw~search~text,″//StrigetRow()argposition2  +″cannonsearchtext,″//StrigetRow()argposition3  +″advertiser~ids,″//liStrigetRow()argposition4  +″advertiser~cnt″//IntgetRow()argposition5  +″FROMlinead02″+″WHEREwords″+″LIKEP$queryORDERBY1desc,advertisercntdesc;″;]]></pre>基于在該“words”字段中該搜索短語的出現(xiàn)頻率、在該索引詞字段中查詢的短語部分彼此的近似以及與在該“word”字段中與詞的次序相比的詞的順序(如果1&gt;查詢短語詞queryphraseword,$rank是可編程包含該搜索結(jié)果的“關(guān)聯(lián)”的一廠商提供的虛擬數(shù)據(jù)字段,該“rank”是特定、通過由不同的任何文本搜索引擎(FreeTextSearchEngine)提供者的各種不同的算法導(dǎo)出的賣主,盡管實(shí)際上相當(dāng)相似于任何賣主的任何文本搜索引擎工作來實(shí)現(xiàn)相關(guān)搜索功能性?!錙RDERBY1desc[ending],advertiser~cntdesc[ending]″首先通過關(guān)聯(lián),然后通過競買該特定的related_search_result的廣告商的數(shù)量的導(dǎo)出字段“advertiser_cnt”控制排列查詢結(jié)果(字段”1”==$rank)。因此,“關(guān)聯(lián)”是主要的選擇標(biāo)準(zhǔn),以及“用戶傾向(popularity)”是次要的選擇標(biāo)準(zhǔn)。在塊610,創(chuàng)建另外的索引并與在塊608創(chuàng)建的倒排索引一起存儲。另外的索引使用與每個搜索列表相關(guān)的關(guān)鍵信息創(chuàng)建。該關(guān)鍵信息包括,如字段性的廣告商數(shù)據(jù)如廣告商的標(biāo)識以及導(dǎo)出的主題如賭博等等。然后該方法在塊612結(jié)束。圖7是說明用于從一數(shù)據(jù)庫移出相似的頁面信息的一種方法的流程圖。在所描述的實(shí)施方式中該方法繼續(xù)圖6的動作602的運(yùn)行。在塊702,按業(yè)績付費(fèi)數(shù)據(jù)庫(也稱為競買的搜索列表數(shù)據(jù)庫)用URL數(shù)據(jù)來檢查并且所有的URLs是從該數(shù)據(jù)庫中抽取出來的并且形成一列表。在塊704,該列表被存儲并且任何精確的副本被移出。在塊706,在該列表中的一URL被選擇并且確定所選擇的URL是否對在該列表中的在前的URL具有相似性。相似性可通過任何適當(dāng)?shù)姆椒ū淮_定,如在該URL中多個相同的字符或字段或相同字符的百分比,或一共同的根或串或字段。在塊708,如果選擇的URL與在前的URL相似,所選擇的URL被添加到一候選的完全相同的URLs的列表。在塊710,搜索(crawl)多個預(yù)定的每個可能的完全一樣的URL。在所描述的實(shí)施例中,預(yù)定數(shù)量首先是兩個可能的完全相同的URLs。搜索(crawl)最好使用稱為一搜索(crawl)者的一程序代碼來實(shí)現(xiàn)。一搜索(crawl)者是訪問網(wǎng)絡(luò)站點(diǎn)和讀取它們的頁面和其他信息的一程序。這種程序是公知的并且也被稱為“spider”或bot”??蛇x擇性地訪問和由一搜索(crawl)者索引整個站點(diǎn)或特定的頁面。在另一實(shí)施例中,由一URL引用的每個站點(diǎn)的子集而不是整個網(wǎng)點(diǎn)可被搜索(crawl)并比較相似性。在塊712,由搜索(crawl)者返回的數(shù)據(jù)被檢查。該數(shù)據(jù)可被稱為URL體并包括來任何該URL標(biāo)識的站點(diǎn)和所有可訪問的站點(diǎn)的頁面的數(shù)據(jù)。確定包括包含在URL體中的文字和其他信息的數(shù)據(jù)與包含在在前的URL體中的數(shù)據(jù)是否十分地相似。此外,可用任何適當(dāng)?shù)姆椒ㄈ缑總€頁面的文字內(nèi)容的Stats比較確定相似性。如果十分相似,控制進(jìn)入塊714并假定該URL與在前的URL相同。文字和其他信息體被指定到該相似的URLs的剩余部分。如果在塊706確定所選擇的URL與在前的URL不相似或如果在塊712,確定該URL體與在前的URL體不是十分相似,控制進(jìn)入塊718。在塊718,該URL被添加到將被搜索(crawl)的URLs的一列表。在塊720,,在該列表上的所有URLs被搜索(crawl)以檢索和存儲包含在由每個URL表示的站點(diǎn)上的信息。在塊716,來自每個搜索(crawl)過的URL的信息被加載到相關(guān)的搜索數(shù)據(jù)庫(也稱為任意文字?jǐn)?shù)據(jù)庫(freetextdatabase)。該信息與已經(jīng)包括在相關(guān)的搜索數(shù)據(jù)庫中的搜索列表數(shù)據(jù)結(jié)合。因此,在圖7中描述的方法步驟通過降低被搜索(crawl)和存儲的URLs的數(shù)量來降低包含在相關(guān)的搜索數(shù)據(jù)庫中的數(shù)據(jù)總量。完全相同的URLs(duplicateURLs)被從該過程中消除并且相近的完全相同品(nearduplicate)URLs用內(nèi)容的相似性被核查。結(jié)果是降低對該最終結(jié)果的數(shù)據(jù)庫的存儲要求以及在該數(shù)據(jù)庫上更快、更有效的查詢。通過提高性能提高用戶的方便。從以上所述,可以看出本發(fā)明提供用于產(chǎn)生呈現(xiàn)給一搜索者在一按業(yè)績付費(fèi)數(shù)據(jù)庫中搜索的相關(guān)的搜索的一種改進(jìn)的方法和裝置。相關(guān)的搜索在使用該按業(yè)績付費(fèi)的數(shù)據(jù)庫形成的一相關(guān)的搜索數(shù)據(jù)庫中被執(zhí)行。來自該相關(guān)的搜索者的數(shù)據(jù)庫的搜索結(jié)果按關(guān)聯(lián)排序用于呈現(xiàn)給該用戶。因此,如果一用戶的最初的搜索太窄或太寬,該用戶具有可被用來產(chǎn)生更可用的結(jié)果的有效的相關(guān)的搜索。另外,該相關(guān)的搜索已經(jīng)使用按競買的搜索項(xiàng)引用的搜索列表產(chǎn)生。這有利于對在該數(shù)據(jù)庫搜索系統(tǒng)中的廣告付費(fèi)的廣告商。這增加了由一搜索者使用該數(shù)據(jù)庫系統(tǒng)訪問一廣告商的網(wǎng)絡(luò)站點(diǎn)的可能性。同時本發(fā)明的一特定的實(shí)施例已經(jīng)示出并描述,也可做修改。因此,覆蓋所有這種變化和修改的附加的權(quán)利要求落在本發(fā)明的精神和范圍內(nèi)。源代碼附錄這實(shí)際上是執(zhí)行來自任何文字搜索引擎(任何文本搜索引擎(FreeTextSearchEngine))(來自的Thunderstone-EPI,Inc.的TexisRDBMS)核心的Java部分并且后處理該結(jié)果,過濾有關(guān)廣告商出現(xiàn)的頻率和主題(“adult”-ness)<prelisting-type="program-listing"><![CDATA[  packagecom.go2.search.related;importjava.util.Vector;  importjava.util.Hashtable;  importjava.util.StringTokenizer;  importjava.rmi.RemoteException;  importcom.go2.texis.*;  /***&amp;commat;authorPhilRorex*&amp;commat;version*/  classCallbackimplementsTErrorMsgIF{privatestaticinterrll5=0;publicintgetErrll5(){return(errll5);}publicvoidErrorMsgDelivery(Stringmsg,intlevel,intmsgNumber){switch(msgNumber){case2{  System.out.println(″FATALmsg″+msg+″level″+level+″msgNumber″+msgNumber);  System.exit(2);}case100break;case115errll5++;break;default  System.out.println(″UNUSUALmsg″+msg+″level″+level+″msgNumber″+msgNumber);}}  /**/**runasastand-aloneJVM,sincetheFreeTextSearcher*beingusedisbestconnectedwithasaJNI-basedClanguage按一單機(jī)的JVM運(yùn)行,因?yàn)樗褂玫娜魏挝淖炙阉髌髯詈门c作為一基于C語言的JNI庫接口API連接?! ?*/publicclassRelatedSearcherCoreimplementsRunnable{//cacheaninstanceofTexisserverandQuery高速緩存Texis服務(wù)器和查詢的一個實(shí)例  privatestaticServertexis=null;  privatestaticQuerytexisQuery=null;  privatestaticQuerytexisPlurQuery=null;  privatestaticQuerytexisAdultQuery=null;  privatestaticlongtimeClock;  //usedtocoordinatetime-outsonextralongqueries用來調(diào)整有關(guān)特別長的查詢的超時  privatestaticfinalIntegerPRE~QUERY=newInteger(1);  privatestaticfinalIntegerMID~QUERY=newInteger(2);  privatestaticfinalIntegerPOST~QUERY=newInteger(3);  privatestaticIntegersemaphore=PRE~QUERY;  //timeoutprocess超時處理  ThreadwatchDog;  //線程開始等待如果Core()沒有超過為它所設(shè)置的超時可能永不會被使用的很長時間  longglobalTimeOut=0;  //Themagicadultflag不可思議的成人標(biāo)記  //Ifarelatedsearchfree-textsearchreturnsarow//whichhasthisfieldset,it’sautomatically″themed″//asanadult-orientedrelatedsearch//Thisparticular″Magicdatarow″ispre-loadedwith//allthe″adult-oriented″termswhicharetypical//inthistheme.SameshouldbedoneforCASINOFLAG//CURRENT~NEWS~FLAG,andanyotherthemedesired.如果一相關(guān)的搜索任何的文字搜索返回具有該字段組的一行,它被自動地“主題化”為一面向成人的相關(guān)的搜索。該特定的“不可思議的數(shù)據(jù)行”是用在該主題內(nèi)很典型的所有“面向成人的”術(shù)語預(yù)載。對CASINOFLAG、CURRENT~NEWS~FLAG和所要求的其他主題也應(yīng)當(dāng)執(zhí)行相同的處理  privatestaticfinalintADULT~FLAG=999999999;  //Howmanypluralizedtriesofthequery//usedtosearchforsingularandplural//versionofupto[squarerootof]MAX_PLURAL_QRY//terms多少次查詢嘗試用來查詢單一的和達(dá)到MAX_PLURAL_QRY的[平方根]的多個版本  privatestaticfinalihtMAX-PLURAL_QRY=4;  //LimitTexistothismanyrows將Texis限定到多個行  //Thisistheinitial#ofpre-filteredfree-text//searchedrowscomingbackfromthesearchengine這是初始的從該搜索引擎返回的預(yù)先過濾的任何文字搜索的行  privatestaticfinalintMARROWS=60;//  //controlsthe’looseness’ofthepost-searchfilter//thatfiltersoutrelatedsearchesbasedonthe//derived-dataelementof(#-of-different-advertisers//biddingonthisrelatedsearchterm).Setto0is//thiselementmeans″howmanytimeswecanignoreseeing//theidenticaladvertiserbeforewestartignoring//relatedsearchesbidonbyhim″0isstrongestreject,//largernumbersrejectlessstringently(usu.not>than//1,ifratioofwebpagesrelatedsearchtermsis>than//about10控制后搜索過濾器的“壓縮”,該過濾器基于(在相關(guān)的搜索項(xiàng)上競買的不同廣告商的#)導(dǎo)出的數(shù)據(jù)部分過濾出相關(guān)的搜索。設(shè)置為0,表示在我們開始忽略由廣告商競買的相關(guān)的搜索前我們可忽略多少次查看相同的廣告商,0是最強(qiáng)烈地拒絕,更大數(shù)量的拒絕不是很嚴(yán)格(如果網(wǎng)頁相關(guān)的搜索項(xiàng)的比率大于10,則usu.not>1)  privatestaticfinalintADVERTISER_THRESHOLD=0;  //theSQLqueryusedtotalktoTexis(theFTSengine)用于與Texis(FTS引擎)對話的SQL查詢  privatestaticfinalStringTEXIS_SQL=″SELECT″+$rank,″//NumgetRow()argposition0+″canon_cnt,″//IntgetRow()argposition1+″rawsearchtext,″//StrigetRowf)argposition2+″cannonsearchtext,″//StrigetRow()argposition3+″advertiser_ids,″//StrigetRow()argposition4+″advertiser_cnt″//IntgetRow()argposition5+″FROMlinead02″+″WHEREwords″+″LIKEP?ORDERBY1desc,advertiser_cntdesc″;  //+″LIKEP?;”;  //+″LIKEP9ORDERBYadvertisercntdesc;按advertiser_cnt的降序排序″;  privatestaticfinalStringTEXIS_PLUR_SQL=″SELECTplural″+″FROMplurals″+″WHEREsingular″+tt=?;111privatestaticfinalStringTEXISADULTSQL=″SELECTcannon_search_text″+″FROMadult″+″WHEREwords″+″LIKE?;″;  privatestaticCallbackcb=newCailback();  publicvoidinit(StringtexisHome,longtimeOut){globalTimeOut=timeOut;init(texisHome);}  publicvoidinit(StringtexisHome){/**  *InstantiateTexisconnectionobjectandperform*Texisqueryinitialization*示例Texis連接對象以及執(zhí)行Texis查詢初始化  *CalledonetimetosetuptheRelatedSearchquery.調(diào)用一次來安裝相關(guān)的搜索查詢  *MustbecalledbeforefindRelateisevercalled.總是在調(diào)用findRelate前必須被調(diào)用  *///PerformTexisinitializationandprecacheaninstance//ofTexisServerandTexisQuery執(zhí)行Texis初始化以及預(yù)先高速緩沖Texis服務(wù)和Texis查詢的一實(shí)例  try{  TexistexisRDBMS=newTexis();texis=(Server)texisRDBMS.createServer(texisHome);  Vectorn=newVector(200);//Vectorn=texis.getNoise();n.addElement(″a″);n.addElement(″about″);n.addElement(″after″);n.addElement(″again″);n.addElement(″ago″);n.addElement(″all″);n.addElement(″almost″);n.addElement(″also″);n.addElement(″always″);n.addElement(″am″);n.addElement(″an″);n.addElement(″and″);n.addElement(″another″);n.addElement(″any″);n.addElement(″anybody″);n.addElement(″anyhow″);n.addElement(″anyone″);n.addElement(″anything″);n.addElement(″anyway″);n.addElement(″are″);n.addElement(″as″);n.addElement(″at″);n.addElement(″away″);n.addElement(″be″);n.addElement(″became″);n.addElement(″because″);n.addElement(″been″);n.addElement(″before″);n.addElement(″being″);n.addElement(″but″);n.addElement(″by″);n.addElement(″came″);n.addElement(″can″);n.addElement(″cannot″);n.addElement(″com″);n.addElement(″come″);n.addElement(″could″);n.addElement(″de″);n.addElement(″del″);n.addElement(″der″);n.addElement(″did″);n.addElement(″do″);n.addElement(″does″);n.addElement(″doing″);n.addElement(″done″);n.addElement(″down″);n.addElement(″each″);n.addElement(″else″);n.addElement(″even″);n.addElement(″ever″);n.addElement(″every″);n.addElement(″everyone″);n.addElement(″everything″);n.addElement(″for″);n.addElement(″from″);n.addElement(″front″);n.addElement(″get″);n.addElement(″getting″);n.addElement(″go″);n.addElement(″goes″);n.addElement(″going″);n.addElement(″gone″);n.addElement(″got″);n.addElement(″goten″);n.addElement(″had″);n.addElement(″has″);n.addElement(″have″);n.addElement(″having″);n.addElement(″he″);n.addElement(″her″);n.addElement(″here″);n.addElement(″him″);n.addElement(″his″);n.addElement(″how″);n.addElement(″i″);n.addElement(″if″);n.addElement(″in″);n.addElement(″into″);n.addElement(″is″);n.addElement(″isn’t″);n.addElement(″it″);n.addElement(″jpg″);n.addElement(″just″);n.addElement(″last″);n.addElement(″least″);n.addElement(″left″);n.addElement(″less″);n.addElement(″let″);n.addElement(″like″);n.addElement(″make″);n.addElement(″many″);n.addElement(″may″);n.addElement(″maybe″);n.addElement(″me″);n.addElement(″mine″);n.addElement(″more″);n.addElement(″most″);n.addElement(″much″);n.addElement(″my″);n.addElement(″myself″);n.addElement(″net″);n.addElement(″never″);n.addElement(″no″);n.addElement(″none″);n.addElement(″not″);n.addElement(″now″);n.addElement(″of″);n.addElement(″off″);n.addElement(″on″);n.addElement(″one″);n.addElement(″onto″);n.addElement(″org″);n.addElement(″our″);n.addElement(″ourselves);n.addElement(″out″);n.addElement(″over″);n.addElement(″per″);n.addElement(″put″);n.addElement(″putting″);n.addElement(″same″);n.addElement(X″sawll);n.addElement(″see″);n.addElement(″seen″);n.addElement(″shall″);n.addElement(″she″);n.addElement(″should″);n.addElement(″so″);n.addElement(″some″);n.addElement(″somebody″);n.addElement(″someone″);n.addElement(″something″);n.addElement(″stand″);n.addElement(″such″);n.addElement(″sure″);n.addElement(″take″);n.addElement(″than″);n.addElement(″that″);n.addElement(″the″);n.addElement(″their″);n.addElement(″them″);n.addElement(″then″);n.addElement(″there″);n.addElement(″these″);n.addElement(″they″);n.addElement(″this″);n.addElement(″those″);n.addElement(″through″);n.addElement(″till″);n.addElement(″to″);n.addElement(″too″);n.addElement(″two″);n.addElement(″unless″);n.addElement(″until″);n.addElement(″up″);n.addElement(″upon″);n.addElement(″us″);n.addElement(″very″);n.addElement(″was″);n.addElement(″we″);n.addElement(″went″);n.addElement(″were″);n.addElement(″what″);n.addElement(″what’s″);n.addElement(″whatever″);n.addElement(″when″);n.addElement(″where″);n.addElement(″whether″);n.addElement(″which″);n.addElement(″while″);n.addElement(″who″);n.addElement(″whoever″);n.addElement(″whom″);n.addElement(″whose″);n.addElement(″why″);n.addElement(″will″);n.addElement(″with″);n.addElement(″within″);n.addElement(″without″);n.addElement(”won’t’l);n.addElement(″would″);n.addElement(″wouldn’t″);n.addElement(″www″);n.addElement(″yet″);n.addElement(″you″);n.addElement(″your″);texis.setNoise(n);texisQuery=(Query)texis.createQuery();texisPlurQuery=(Query)texis.createQuery();texisAdultQuery=(Query)texis.creat.eQuery();  /**Query.api()’saffectALLqueries,notjustonessetonQuery.api()受所有查詢的影響,而不僅是確定的查詢  */texisQuery.setlikeprows(MARROWS);texisQuery.allinear(0);texisQuery.alpostproc(0);texisQuery.prepSQL(TEXISSQL);texisPlurQuery.prepSQL(TEXIS_PLUR_SQL);texisAdultQuery.prepSQL(TEXISADULTSQL);  TErrorMsg.RegisterMsgDelivery(cb);watchDog=newThread(this);watchDog.setPriority(Thread.NORMPRIORITY+1);watchDog.start();}catch(TExceptionte){te.printStackTrace();thrownewRuntimeException(″CouldnotinitializeTexisFailedwith″+te.getMsg()+code″+te.getErrorCode());}catch(RemoteExceptionre){thrownewRuntimeException(″UnexpectedRemoteException+re);}}/**  *PerformaTexisrelatedsearchqueryandpackageresults(ifany)*intoanarrayofRelatedResultsobjects執(zhí)行一Texis相關(guān)的搜索查詢以及將結(jié)果(若有的話)打包成RelatedResult對象的一數(shù)組  */publicRelatedResult[]findRelated(StringrawQuery,StringcanonQuery,intmaxResults,intmaxResultLength)throwsException{try{returnfindRelated(rawQuery,canonQuery,maxResults,maxResultLength,2000);}catch(Exceptione){e.printStackTrace();thrownewException(″overloadedfindRelated″+e.getMessage());}}publicRelatedResult[]findRelated(StringrawQuery,StringcanonQuery,intmaxResults,intmaxResultLength,longtimeOut)throwsRelatedSearchException{//localvars  VectorresultVector=newVector();  VectorthisRow=newVector();  RelatedResult[]results=null;intresultCount=0;intrank=0;intcanonCnt=0;  Integeradvertiserid=null;intadvertiserCnt=0;  StringadvertiserIds=null;  StringrawSearchText=null;  StringcanonSearchText=null;  Runtimert=Runtime.getRuntime();longmem=rt.totalMemory();longfree=rt.freeMemory();//System.err.println(″totalMemory()″+mem);//System.err.println(″freeMemory()″+free);try{if(canonQuery==null)return(null);  VectorqueryArgs=newVector();  StringnewQuery;if(timeOut!=0)  //gettheloopoutofwait()mode使該循環(huán)離開wait()模式  synchronized(watchDog){globalTimeOut=timeOut;//System.err.println(//System.currentTimeMillis()//+//+timeClock//+//+(System.currentTimeMillis()-timeClock)//+″CoresettingMID_QUERY″);semaphore=MID_QUERY;timeClock=System.currentTimeMillis();  //threadbetterbewaitingoneternity線程最好永遠(yuǎn)等待  watchDog.notify();})  //ifnoRawQuery,probablyhavecanonicalizedversiononly如果沒有行查詢,最好僅具有規(guī)范的版本if(rawQuery?。絥ull)  //usualservingsite,don’tre-pluralize,justuse//rawquery普通的服務(wù)站點(diǎn),不是多數(shù),正好使用行查詢  ;newQuery=stripNoiseChars(rawQuery);}else  //onlyhaveacanonQuerytoworkwith,somake//aroughapproximationofarawtermtoincludeinsearch//tryandgeneratequeriestocoveruptoMAX_PLURAL_QRYpossible//re-pluralizedformsofthequery僅具有一canonQuery來工作,因此做出一行術(shù)語的粗略的近似以包括在查詢嘗試中并生成查詢來覆蓋該查詢的重新使成復(fù)數(shù)形成的MAX_PLURAL_QRY  newQuery=pluralize(stripNoiseChars(canonQuery));}//ifif(newQuery=null)returnnull;if(isAdult(newQuery))returnnull;  //Setupthe(stackallocated)queryparameters建立(分配堆棧的)查詢參數(shù)  queryArgs.removeAllElements();queryArgs.addElement(newQuery);  //performJNIcallshere在這里執(zhí)行JNI調(diào)用  texisQuery.setParam(queryArgs);texisQuery.execSQL();  //Iterateovertherows在行上重復(fù)  StringlastCanon=rawQuery;  Hashtableadvertisers=newHashtable(MAX_ROWS*200);.  Hashtableused=newHashtable(MXX_ROWS)  VectorresultSet=texisQuery.getRows();//VectorresultSet=getRowsLocal();  //make2passes.做2遍  //firsttimede-duponadvertisers第一次不復(fù)制有關(guān)廣告商  //secondtimedon’tdedup第二次打開  //System.out.println(″gotrows″+resultSet.size());for(intpass=0;pass<2;pass++){if(resultCount>=maxResults),break;for(inti=0;i<resultSet.size();i++){thisRow=(Vector)resultSet.elementAt(i);if(thisRow.size()==6){rank=((Number)(thisRow.elementAt(0))).intValue();//System.out.println(thisRow.elementAt(0).getClass().toString());canonCnt=((Integer)(thisRow.elementAt(1))).intValue();rawSearchText=(String)thisRow.elementAt(2);canonSearchText=(String)thisRow.elementAt(3);advertiserIds=(String)thisRow.elementAt(4);advertiserCnt=((Integer)thisRow.elementAt(5)).intValue();  //DropoutearlyifwedetectmagicADULT_FLAG如果檢測到不可思議的ADULT_FLAG,先離開  if(advertiserCnt==ADULT_FLAG)returnnull;if(canonCnt==ADULTFLAG)returnnull;if(false){  System.out.println(″rank″+rank+″cnt″+canonCnt+″rst″+rawSearchText+″cst″+canonSearchText+″aids″+advertiserIds+″adcnt″+advertiserCnt);}}else(thrownewRelatedSearchException(″Texisqueryfailed,protocolviolation″);)  //De-duptheresults,andalsodon’treturnarelated//searchtermwhichcanonicallymatchestheoriginalquery不完全相同該結(jié)果,并且也不返回規(guī)范地匹配最初的查詢的一相關(guān)的搜索項(xiàng)if((!canonSearchText.equalsIgnoreCase(rawQuery))&amp;&amp;(!canonSearchText.equals(canonQuery))&amp;&amp;(!rawSearchText.equalsIgnoreCase(rawQuery))&amp;&amp;(!rawSearchText.equalsIgnoreCase(canonQuery))&amp;&amp;(canonSearchText.length()<=maxResultLength)){//System.out.println(″gotcst″+canonSearchText);  //lookforthisadvertiserinthehashtable在散列表中查詢該廣告商  //ifthere,incrementoccurrancescount//andifabovethreshhold,we’veseenenough//termssuggestedbythisadvertiser,sogoto//nextterm//ifnotseenthisadvertiseryet,putitinthe//hashtableandprocess如果有,遞增出現(xiàn)數(shù)并且如果超出閥值,我們可以看到由該廣告商建議的很多的術(shù)語,因此到另一術(shù)語,如果未看到該廣告商,將其放入該散列表和過程中  StringTokenizerst=newStringTokenizer(advertiserIds,″″)i//if(st.countTokens()!=advertiserCnt){//System.out.println(″toks″//+st.countTokens()//+″Cnt″//+advertiserCnt);//thrownewRelatedSearchException(//″Texisquerysuspect,wrongadvertisercount″);//}if(pass==0){intdupAdvCnt=0;booleanNext=false;  //ParsealltheadvertiserID’soutofthereturnedrow分析不在返回行的所有廣告商的ID  while(st.hasMoreTokens())  Integeradvertiserld=Integer.valueOf(st.nextToken());//if(!advertisers.containsKey(advertiserld))  //ifthisadvertiserisnewtous(overwholequery)//putinthehash如果該廣告商對我們來說是新的(在整個查詢上),放入散列中  Integercnt=(Integer)advertisers.get(advertiserId);if(cnt==null)(advertisers.put(advertiserId,newInteger(0));)else  //Seenthisadvertiserbefore,soincrementhis//tally以前見過該廣告商,因此遞增其計(jì)數(shù)  advertisers.put(advertiserId,new  Integer(cnt.intValue()+1));//System.out.println(advertiserId+″dups″+(cnt.intValue()+1));  //Ifhe’s(now)pastthethreshhold,don’tuse//biddedterm(yet)如果他(現(xiàn)在)超過該閥值,不使用競買的術(shù)語  if(cnt.intValue()>=ADVERTISER_THRESHOLD)Next=true;break;}dupAdvCnt++;}}if(Next==true){continue;}else{if(!used.containsKey(canonSearchText)){used.put(canonSearchText,newBoolean(true));}}}else{if(!used.containsKey(canonSearchText)){used.put(canonSearchText,newBoolean(true));}else{continue;}}//if(dupAdvCnt>=ADVERTISER_THRESHOLD)  //continue;繼續(xù)  //System.out.println(″dups″+dupAdvCnt);//}/**if(pass==0)  //firsttimethruseeifwe’veusedthisadvertiser第一次,通過查看我們是否已經(jīng)使用該廣告商  Integercnt=(Integer)advertisers.get(advertiser_id);if(cnt==null)(advertisers.put(advertiser_id,newInteger(0));}else{advertisers.put(advertiser_id,new  Integer(cnt.intValue()+1));if(cnt.intValue()>=ADVERTISER_THRESHOLD){continue;}}if(!used.containsKey(canonSearchText)){used.put(canonSearchText,newBoolean(true));}}else(//thisisasecond(ormore)timethru.  //seeifwe’vealreadyusedthisterm這是第一次(或更多)次通過查看我們是否已經(jīng)使用過該術(shù)語  if(!used.containsKey(canonSearchText)){used.put(canonSearchText,newBoolean(true));}else{continue;}}**/if(resultCount<maxResults){resultVector.addElement(newRelatedResult(rawSearchText,  RelatedResult.NONCACHED));resultCount++;}else{break;}//if-else}//if)//for}//for)catch(TExceptionte){thrownewRelatedSearchException(″Texisinterfacefailedwith″+te.getMsg(),te);}catch(Throwablet){t.printStackTrace();thrownewRelatedSearchException(″UnexpectedTexisfailurewith″+t.getMessage(),t);}finally{if(timeOut?。?){synchronized(watchDog){//System.err.println(//System.currentTimeMillis()//+//+timeClock//+//+(System.currentTimeMillis()-timeClock)//+″CoresettingPOST_QUERY″);semaphore=POST_QUERY;timeClock=System.currentTimeMillis();  //causethreadtowaitoneternity使進(jìn)行等待很長時間  globalTimeOut=0;watchDog.notify();//System.err.println(//System.currentTimeMillis()//+//+timeClock//+//+(System.currentTimeMillis()-timeClock)//+″Coredonewithcallingnotify″);}}//System.out.println(″INFO115err″s″+cb.getErrll5());if(cb.getErrll5()>100){  System.out.println(″FATALToomanyErrll5’s″);  System.exit(3);}if(resultVector.size()==0)returnnull;else{resultVector.copyInto(results=newRelatedResult[resultVector.size()]);returnresults;}}privateStringstripNoiseChars(Stringterm){//Cleanupthequeryabitif(term.length()<2)return(null);char[]buf=newchar[term.length()];intfirstChar=0;term.getChars(0,buf.length,buf,0);for(inti=0;i<buf.length;i++){if(buf[i]<0x20‖buf[i]>0x7e)return(null);switch(buf[i]){case(’-’)case(”)casecasecase(’#’)case(’$’)casecasecasecasecasecasecase(’-’)casecasecasecasecasecase(’)’}casecasecasecasecasecase(’″’)case(’\\’)case(’>’)case(’,’)casecase(’.’)casecasecasebuf[i]=”;//System.out.println(″i″//+i+″firstChar″+firstChar//+″settingbuf[i]″//+(String.valueOf(buf[i]))+″settingtospace″);if(firstChar==i)firstChar=i+l;}}}//onlyspacesleft只留下空間  if(firstChar==buf.length)return(null);term=term==null?nullString.valueOf(buf,firstChar,buf.length-firstChar).trim();switch(term.length()){case0caselreturn(null);default{switch(buf[firstChar])(case(’h’)case(’H’)case(’w’)case(’W’){  StringlowerTerm=term.toLowerCase();  //Usethelcaseversofthestringfortesting//butmakesuretoSETtheoriginalstringtoreturn使用該串的lcase版本來測試,但確定設(shè)置該初始串來返回  if(lowerTerm.startsWith(″httpwww″))term=term.substring(10);elseif(lowerTerm.startsWith(″httpwww″))term=term.substring(9);elseif(lowerTerm.startsWith(″httpwww″))term=term.substring(8);elseif(lowerTerm.startsWith(″hhttpwww″))term=term.substring(11);elseif(lowerTerm.startsWith(″http″))term=term.substring(5);elseif(lowerTerm.startsWith(″http″))term=term.substring(4);elseif(lowerTerm.startsWith(″www″))term=term.substring(4);elseif(lowerTerm.startsWith(″www″))term=term.substring(3);}}}}switch(term.length())(case0case1return(null);default{switch(term.charAt(term.length()-1)){case(’m’)case(’M’)case(’t’)case(’T’)case(’g’)case(’G’)case(’f’)case(’F’){  StringlowerTerm=term.toLowerCase();if(lowerTerm.endsWith(″dotcom″))term=term.length()>8?term.substring(0,term.length()-8).null;elseif(lowerTerm.endsWith(″dotcom″))term=term.length()>  7?term.substring(0,term.length()-7)null;elseif(lowerTerm.endsWith(″com″))term=term.length()>4?term.substring(0,term.length()-4)null;elseif(lowerTerm.endsWith(″net″))term=term.length()>4?term.substring(0,term.length()-4)null;elseif(lowerTerm.endsWith(″org″))term=term.length()>4?term.substring(0,term.length()-4)null;elseif(lowerTerm.endsWith(″gif″))term=term.length()>4?term.substring(0,term.length()-4)null;elseif(lowerTerm.endsWith(″jpg″))term=term.length()>4?term.substring(0,term.length()-4)null;}})}//DebugSystem.out.println(″term[″+term.trim()zureturn(term==null?nullterm.trim());}privatebooleanisAdult(Stringquery)throwsRelatedSearchException{if(query==null)returnfalse;  VectorqueryArgs=newVector();  VectorthisRow=newVector();queryArgs.addElement(query);try  //performJNIcalls執(zhí)行JNI調(diào)用  texisAdultQuery.setParam(queryArgs);texisAdultQuery.execSQL();if((thisRow=texisAdultQuery.getRow()).size()?。?){return(true);}else(return(false);}catch(TExceptionte){thrownewRelatedSearchException(″Texisinterfacefailedwith″+te.getMsg(),te);}catch(RemoteExceptionre){thrownewRelatedSearchException(″GotaRemoteExceptionthatshouldneveroccur″+re);})privateStringpluralize(Stringtoken)throwsRelatedSearchException{if(token==null)returnnull;  VectorqueryArgs=newVector();  StringpluralToken;  VectorthisRow=newVector();  StringTokenizerst0=newStringTokenizer(token,″″);  String[]terms=newString[st0.countTokens()];  String[]fullQuery=newString[MAX_PLURAL_QRY];intfullQueryCnt=0;  //Iterateovereachtokentoseeifthere’sapluralversion使每個重復(fù)來查看是否有多個版本  for(intele0=0;st0.hasMoreTokens();ele0++){terms[ele0]=st0.nextToken();)for(intelement=0;element<terms.length&amp;&amp;fullQueryCnt<  MAX_PLURAL_QRY;element++)  //Dopluralslookuponthistermfromtexisdb從該Texis數(shù)據(jù)庫執(zhí)行多次有關(guān)該術(shù)語的查找  queryArgs.removeAllElements();queryArgs.addElement(terms[element]);try  //performJNIcalls執(zhí)行JNI調(diào)用  texisPlurQuery.setParam(queryArgs);texisPlurQuery.execSQL();  //retrievetherow檢索該行  if((thisRow=texisPlurQuery.getRow(##.size(#?。?#  Stringterm=null;  //loopthrutheterms循環(huán)完術(shù)語  for(intelel=0;elel<terms.length;elel++)(if(elel==element)(if(elel==0){term=(String)(thisRow.elementAt(0));}else(term+=″″+(String)(thisRow.elementAt(0));}}else{if(elel==0)term=terms[elel];elseterm+=″″+terms[elel];}}fullQuery[fullQueryCnt]=term;fullQueryCnt++;})catch(TExceptionte){thrownewRelatedSearchException(″Texisinterfacefailedwith+te.getMsg(),te);}catch(RemoteExceptionre){thrownewRelatedSearchException(″Gota  RemoteExceptionthatshouldneveroccur″+re);})  //Buildthenewexpandedquery連編該新擴(kuò)展的查詢  if(fullQueryCnt>0){pluralToken=″(″+token;for(inti=0;i<fullQueryCnt;i++){pluralToken=pluralToken+″,″+fullQuery[i];}pluralToken=pluralToken+″)″}else(pluralToken=token;}return(pluralToken);}publicVectorgetRowsLocal()throwsTException,RemoteException{  Vectorset=newVector();inte;synchronized(APIToken.Lock){while(true)  Vectorrow=newVector();row=texisQuery.getRow();if(row.size()==0)break;set.addElement(row);)}returnset;}publicsynchronizedvoidrun(){while(true)(try  //startourtimeout開始我們的超時  synchronized(watchDog){//System.err.println(//System.currentTimeMillis()////+timeClock////+(System.currentTimeMillis()-timeClock)//+″runstartingwaitof″//+globalTimeOut);watchDog.wait(globalTimeOut);  //justgotwokeup,//seewhy正好被換醒,查看為什么  if(semaphore.equals(PRE-QUERY)){//System.err.println(//System.currentTimeMillis()//+″-″//+timeClock//+″=″//+(System.currentTimeMillis()-timeClock)//+″rungotPRE_QUERY″);continue;}elseif(semaphore.equals(POST_QUERY)){//System.err.println(//System.currentTimeMillis()//+//+timeClock//+″=″//+(System.currentTimeMillis()-timeClock)//+″rungotPOST_QUERY″);continue;}elseif(semaphore.equals(MID-QUERY)){if(System.currentTimeMillis()-timeClock>=globalTimeOut)  //wetimedout,butsemaphorewasn’t//set,sohoseourselves我們時間到了,但沒有設(shè)置信號標(biāo)志,因此我們自己停止  System.err.println(  System.currentTimeMillis()+timeClock+(System.currentTimeMills()-timeClock)+’Fataltimeout″+globalTimeOut+″usecexceeded″);  System.exit(1);}else{//System.err.println(//System.currentTimeMillis()//+//+timeClock//+//+(System.currentTimeMillis()-timeClock)//+″rungotMID-QUERY,butOK!″);}}elseSystem.err.println(  System.currentTimeMillis()+timeClock+(System.currentTimeMillis()-timeClock)+″runARGHHgotno_QUERY,Hmmmmm!″);}})catch(Exceptione){  System.err.println(″gotwait()exception″);))}  Thefollowingcodeisusedtoimplementthecachedresultslookup,firsttoseeifwe’veseenthisrelatedsearchbefore,tosavetimeandnotdothealgorithmiclookupduringtherelatedsearchexecution.以下的代碼被用來實(shí)現(xiàn)高速緩沖結(jié)果的查找,首先查看我們以前是否已經(jīng)看出過該相關(guān)的搜索結(jié)果以節(jié)約時間而且在相關(guān)搜索執(zhí)行期間不執(zhí)行算法查找  packagecom.go2.search.related;//importatg.nucleus.GenericRMIService;importatg.nucleus.GenericService;importatg.nucleus.ServiceException;importatg.service.resourcepool.JDBCConnectionPool;importatg.service.resourcepool.ResourceObject;importatg.service.resourcepool.ResourcePoolException;importjava.rmi.RemoteException;importjava.net.*;importjava.io.*;importjava.sql.*;importjava.util.Vector;  /***Thisisthetoplevelinterfacetotherelatedsearch*systemitismeanttobeusedasadynamoserviceavailable*tootherdynamoservices**/這是對該相關(guān)搜索系統(tǒng)來說最高級的接口,它表示可被用作對其他動態(tài)服務(wù)來說可用的一動態(tài)服務(wù)//publicclassRelatedSearcherImplextendsGenericRMIServicepublicclassRelatedSearcherImplextendsGenericServiceimplementsRelatedSearcher{//mypoolofTexis/UDP我的Texis/UDP庫  privateTexisUDPConnectionPooltexisUDPConnectionPool;//mypoolofconnectionstoOraclecache我的連接到Oracle高速緩沖存儲器上的庫  privateJDBCConnectionPoolrelatedCacheConnectionPool;//StatisticspropertiesStats學(xué)特性privateintrequestCount=0;privateintoracleCacheHits=0;privateinttexisRequests=0;privateinttexisTimeoutMillis=0;privateintslowTexisRequestCount=0;//privateconstants專用常數(shù)  privatestaticStringCACHE_SQL=″SELECT*FROMRESEARCH  WHERECANON_QUERY=?″;privatestaticintBUFFERSIZE=512;//parameters參數(shù)  privatebooleantexisEnabled=false;privatebooleanoracleEnabled=false;privatebooleansystemEnabled=false;privatelongcummulativeOracleTime=0;privatelongcummulativeTexisTime=0;  /***CreateandexportandinstanceofRelatedSearcheroverRMI在RMI上RelatedSearcher的產(chǎn)生以及輸出以及實(shí)例  */publicRelatedSearcherImpl()throwsRemoteException{super();//java.rmi.registry.LocateRegistry.createRegistry(llll).rebind(″RelatedSearcher″,this);}/**  *ThismethodwascreatedinVisualAge.該方法用VisualAge創(chuàng)建  *&amp;commat;returnRelatedResult[]*&amp;commat;paramcanonQueryjava.lang.String*&amp;commat;parammaxResultsint*&amp;commat;parammaxLengthint*/privateRelatedResult[]findFromCache(StringcanonQuery,intmaxResults,intmaxLength)throwsRelatedSearchException  VectorresultVector=newVector();  RelatedResult[]results=null;  PreparedStatementps=null;  ResultSetrs=null;try{//GetaConnection得到一連接  ResourceObjectresource=null;try{.resource=getRelatedCacheConnectionPool().checkout(getAbsoluteName());Connectionconn=(Connection)resource.getResource()booleansuccess=false;try{//Here’swherewegetthegoodsfromOracle這里我們可從Oracle獲得商品  ps=conn.prepareStatement(CACHE_SQL);ps.setString(l,canonQuery);rs=ps.executeQuery();//primethecursortopointtotheoneandonlyrowwe//expectfromOracleifnowmatchingrowswerefound//thenwe’llsimplydropthrutotheend最初將光標(biāo)指向我們期望的來自O(shè)racle的一個或僅一行,如果現(xiàn)有匹配行已經(jīng)找到,那么我們將簡單地落到結(jié)尾  if(rs.next()){//Extractthedataweneediftherewassomething如果有,抽取我們需要的數(shù)據(jù)  intnumTerms=rs.getInt(2);if(numTerms==0)//Thecachetellsusthattherewon’tbe//anyresultssowe’llbailearlythrownew高速緩存器告訴我們沒有任何結(jié)果,因此我們將先委托扔出新的  RelatedSearchException(″NorelatedResults″);intcacheFlag=rs.getInt(3);//iterateoverresultsretrievinguptomaxResults//ofthoseofthemthataremaxLengthorsmaller重復(fù)有關(guān)是maxLength或更小的那些maxResults檢索的結(jié)果  intresultCount=0,rowCount=0;while(resultCount<maxResults&amp;&amp;rowCount<numTerms){  Stringterm=rs.getString(4+rowCount);//pushthistermintotheresultvectorifitsgood將該術(shù)語推入該結(jié)果矢量中,如果它的商品  if(term.length()<=maxLength){resultVector.addElement(new  RelatedResult(term,cacheFlag));resultCount++;)rowCount++;}}conn.commit();success=true;}finally{//Cleanupresultset整理結(jié)果集合  if(rs!=null)rs.close();//Cleanuppreparedstatement整理準(zhǔn)備的語句if(ps!=null)ps.close();//Cleanupconnection整理連接  if(!success&amp;&amp;conn?。絥ull)conn.rollback()i}//try-finally最后一次嘗試  }finally{//ChecktheConnectionbackin再次登記該連接  if(resource?。絥ull)getRelatedCacheConnectionPool().checkIn(resource);}//try-finally最后一次嘗試  )catch(ResourcePoolExceptionexc){if(isLoggingError()){logError(″UnabletogetOraclecacheconnection″,exc);}thrownewRelatedSearchException(″UnabletogetOraclecacheconnection″,exc);}catch(SQLExceptionse){if(isLoggingError()){logError(″InterfacewithOraclecachefailed″,se);}thrownewRelatedSearchException(″InterfacewithOraclecachefailed″,se);-}//try-catch嘗試捕獲  if(resultVector.size()==0)returnnull;else{resultVector.copyInto(results=new  RelatedResult[resultVector.size()]);returnresults;}}  *CommunicatetoTexisthruTexisConnectionPool通過TexisConnectionPool連接到Texis  *&amp;commat;returnRelatedResult[]*&amp;commat;paramcanonQueryjava.lang.String*&amp;commat;parammaxResultsint*&amp;commat;parammaxLengthint*/privateRelatedResult[]findFromUDPTexis(StringrawQuery,StringcanonQuery,intmaxResults,intmaxLength)throwsRelatedSearchException{  RelatedResult[]results=null;//GetaUDPTexisConnection獲得一UDPTexisConnection  ResourceObjectresource=null;  TexisUDPConnectiontc=null;try{resource=getTexisUDPConnectionPool().checkOut(getAbsoluteName());tc=(TexisUDPConnection)resource.getResource();  DatagramSocketsocket=tc.getSocket();//dothisatruntimetobeabletoswitchDynamoatruntime在運(yùn)行時執(zhí)行該操作以便能在運(yùn)行時轉(zhuǎn)換Dynamo  socket.setSoTimeout(getTexisTimeoutMillis());//packagedatatosend打包數(shù)據(jù)以便發(fā)送  TexisRequestrequest=newTexisRequest();request.setRawQuery(rawQuery);request.setCanonQuery(canonQuery);request.setMaxResults(maxResults);request.setMaxChars(maxLength);request;setSequenceNumber(++tc.sequenceNumber);request.setTimeout(getTexisTimeoutMillis());  ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamous=newObjectOutputStream(baos);ous.writeObject(request);ous.flush();baos.close();byte[]sendData=baos.toByteArray();//senditofftotheserver從服務(wù)器發(fā)送它  if(isLoggingDebug()){logDebug(″AbouttosendtoTexisatendpoint″+tc.getHostO+″″+tc.getPort());}//sendit發(fā)送它  DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,tc.getHost(),tc.getPort());socket.send(sendPacket);//waitforareplyuptotimeOut等待有關(guān)超過毫秒的一響應(yīng)  longstartWait=System.currentTimeMillis();while(true){//pulloffinboudpacketsandcheckthemthetherightsequenceNumber完成inboud信息包并用正確的順序號核對它們//throwsajava.io.InterruptedIOExeptionontimeout  DatagramPacketreceivePacket=new  DatagramPacket(newbyte[BUFFER_SIZE],BUFFER_SIZE);socket.receive(receivePacket);  ObjectInputStreamois=newObjectInputStream(newByteArrayInputStream(receivePacket.getData()));  TexisResponseresponse=(TexisResponse)ois.readObject();ois.close();if(response.getSequenceNumber()?。絫c.sequenceNumber){//wegotastaleresponse我們獲得一失效的響應(yīng)  longmidPoint=System.currentTimeMillis();intremainder=(int)(getTexisTimeoutMillis()-(midPoint-startWait));if(remainder>0){//ifwecanstillwaitsomemorebeforeatimeout如果我們在一超時前還能等待更久//resetsockettimeOuttotheremainingtime對剩余的時間重新設(shè)置插槽的timeOut  socket.setSoTimeout(remainder);}else{//giveupatthispointbreak;在該點(diǎn)中止  }}//if-wrong-sequence-numberelse{results=response.getResults();break;})//while}catch(ResourcePoolExceptionrpe){if(isLoggingError()){logError(″UnabletogetorcheckinaTexisconnection″,rpe);)}catch(ClassNotFoundExceptioncnfe){if(isLoggingError()){logError(″ClassnotfoundException″,cnfe);}}catch(SocketExceptionse){if(isLoggingError())logError(″SocketExceptiontalkingtoTexis″,se);}}catch(StreamCorruptedExceptionsce){if(isLoggingError()){logError(″CorruptedreturnfromTexis″,sce);)}catch(InterruptedIOExceptionioie){if(isLoggingDebug()){logDebug(″TimedouttalkingtoTexis″,ioie);}}catch(IOExceptionioe){if(isLoggingDebugflogDebug(″TimedouttalkingtoTexis″,ioe);})finally{//ChecktheConnectionbackinifwegotitinthefirstplacetry{if(resource!=null)getTexisUDPConnectionPool().checkIn(resource);}catch(ResourcePoolExceptionrpe){/*ignorethisone忽略這一個*/}}returnresults;}*&amp;commat;returnRelatedResult[]-anarrayofRelatedResultobjectsRelatedResult對象的一個數(shù)組*whichisorderedbyrelebancefromhightolowornullifthesystemisdisableorno*relatedresultswerefound按關(guān)聯(lián)從高到低或如果該系統(tǒng)被禁止或沒有找到相關(guān)的結(jié)果的空排序*&amp;commat;paramrawQueryjava.lang.String-rawqueryforwhichrelatedsearchesareneeded用于相關(guān)的搜索所需的原始查詢*&amp;commat;paramcanonQueryjava.lang.String-canonocalizedforoftherawquery原始查詢的規(guī)范化*&amp;commat;parammaxResultsint-maximumnumberofresultsrequested所請求的最大結(jié)果數(shù)據(jù)*&amp;commat;parammaxResultLenghtint-maximumlenghtofaresultincharacters在字符中一結(jié)果的最大長度*/publicRelatedResult[]findRelated(StringrawQuery,StringcanonQuery,intmaxResults,intmaxResultLength)//throws  RelatedSearchExceptionthrows  RelatedSearchException,RemoteException{requestCount++;//Returnfastifsystemisdisabled如果系統(tǒng)被禁止,則返回快  if(!getSystemEnabled())returnnull;  RelatedResult[]results=null;//firsttrygettingdatafromtheOraclepool(ifenabled)(如果允許)第一次嘗試從Oracle取數(shù)  if(getOracleEnabled()){try{longstartOracle=System.currentTimeMillis();//keeptimingstats繼續(xù)計(jì)時Stats  results=.findFromCache(canonQuery,maxResults,maxResultLength);oracleCacheHits++;//fixedstatisticsbugcummulativeOracleTime+=(System.currentTimeMillis()-startOracle);}catch(RelatedSearchExceptionrse){//IfOracletoldusthatthissearchhasnorelated//i.e.editorially-excludedporn,thendropoutearly如果Oracle告訴我們該搜索沒有相關(guān)的即編輯上排除了色情部分,則先退出  if(rse.getRootCause()==null){returnnull;)else{//logitotherwiseforpostmortem否則對后mortem登錄它if(isLoggingError())logError(″FailedtointerfacetoOraclecache,willtryTexis″,rse);}}catch(Exceptione){if(isLoggingError())logError(″FailedtointerfacetoOracle″,e);}}//ifOracleenabled如果Oracle允許//ifunsuccessfullthentryTexispoolifenabled如果未成功,則如果允許的話嘗試Texis  if(getTexisEnabled()&amp;&amp;results==null){try{longstartTexisQuery=System.currentTimeMillis();//keeptexistimingstats繼續(xù)Texis計(jì)時Stats  texisRequests++;results=findFromUDPTexis(rawQuery,canonQuery,maxResults,maxResultLength);longtexisQueryMillis=System.currentTimeMillis()-startTexisQuery;’//logabnormallylongrequesttime記錄異常的長的請求時間  if(texisQueryMillis>getTexisTimeoutMillis())slowTexisRequestCount++;cummulativeTexisTime+=texisQueryMillis;}catch(Exceptione){if(isLoggingError())logError(″Texisinterfacefailedwith″+e.getMessage(),e);)}//iftexisEnabledreturnresults;如果texisEnabled返回結(jié)果)/***StatsaccessorStats訪問程序*&amp;commat;returnString*/publicStringgetCummulativeOracleTime(){return(cummulativeOracleTime/1000.0)+″seconds″}/***StatsaccessorStats訪問程序*&amp;commat;returnlong*/publicStringgetCummulativeTexisTime(){return(cummulativeTexisTime/1000.0)+″seconds″;}/***StatsaccessorStats訪問程序*&amp;commat;returnint*/publicintgetOracleCacheHits(){returnoracleCacheHits;}/***StatsaccessorStats訪問程序*&amp;commat;returnboolean*/publicbooleangetOracleEnabledfreturnoracleEnabled;}/***AccessorforrelatedCacheConnectionPool用于relatedCacheConnectionPool的訪問程序*&amp;commat;returnatg.service.resourcepool.JDBCConnectionPool*/publicJDBCConnectionPoolgetRelatedCacheConnectionPool(){returnrelatedCacheConnectionPool;}/***StatsaccessorStats訪問程序  &amp;commat;returnint*/publicintgetRequestCount(){returnrequestCount;}/***StatsaccessorStats訪問程序*&amp;commat;returnint*/publicintgetslowTexisRequestCount(){returnslowTexisRequestCount;}/***StatsaccessorStats訪問程序*&amp;commat;returnboolean*/publicbooleangetSystemEnabled(){returnsystemEnabled}/***StatsaccessorStats訪問程序*&amp;commat;returnboolean*/publicbooleangetTexisEnabled(){returntexisEnabled;}/***statsaccessorStats訪問程序*&amp;commat;returnint*/publicintgetTexisRequests(){returntexisRequests;}/***configuparamaccessor配置參數(shù)訪問程序*&amp;commat;returnint*/publicintgetTexisTimeoutMillis(){returntexisTimeoutMillis;}/***ThismethodwascreatedinVisualAge.該方法用VisualAge創(chuàng)建  *&amp;commat;returncom.go2.search.related.TexisUDPConnectionPool*/publicTexisUDPConnectionPoolgetTexisUDPConnectionPool(){returntexisUDPConnectionPool;}/***mutator*&amp;commat;paramnewValueboolean*/publicvoidsetOracleEnabled(booleannewValue){this.oracleEnabled=newValue;)/***MutatorforrelatedCacheConnectionPool用于relatedCacheConnectionPool的Mutator*&amp;commat;paramnewValueatg.service.resourcepool.JDBCConnectionPool*/publicvoidsetRelatedCacheConnectionPool(JDBCConnectionPoolnewValue){this.relatedCacheConnectionPool=newValue;}/***mutator*&amp;commat;paramnewValueboolean*/publicvoidsetSystemEnabled(booleannewValue){this.systemEnabled=newValue;}/***mutator*&amp;commat;paramnewValueboolean*/publicvoidsetTexisEnabled(booleannewValue){this.texisEnabled=newValue;}/***parametermutator參數(shù)mutator*&amp;commat;paramnewValueint*/publicvoidsetTexisTimeoutMillis(intnewValue){this.texisTimeoutMillis=newValue;}/***ThismethodwascreatedinVisualAge.該方法是用VisualAge創(chuàng)建  *&amp;commat;paramnewValuecom.go2.search.related.TexisUDPConnectionPool*/publicvoidsetTexisUDPConnectionPool(TexisUDPConnectionPoolnewValue){this.texisUDPConnectionPool=newValue;}}  Thefollowingcodeiscontrolcodethatcontrolsthedumpingofsearchlistingdatabase,loadingthecrawledtext,andinverted-indexingalltherelatedsearchindexing,includingbuildingthe’derived-data’elements以下代碼是控制搜索列表數(shù)據(jù)庫的信息轉(zhuǎn)儲、載入搜索(crawl)過的文字以及倒排索引所有的相關(guān)搜索索引的控制碼,包括連編“所導(dǎo)出的數(shù)據(jù)”部分  #!/bin/ksh-xexportPATH=/usr/local/morph3/bin:.:$PATH#../.zshrcexportTMP=/export/home/goto/tmpexportTEMP=$TMPexportTEMPDIR=$TMPexportTMPDIR=$TMPTMPTABLE=lineadO  TMPTABLE2=linead  TERMSTABLE=terms  INC=02NEWTABBE=line_ad${INC}CRAWLDATA=/home/goto/rs/DONE/ALL.UNIQCRAWLTABLE=linead4  SPOOL=/home/goto/list  DB=/home/goto/crawldb###############  Log(){echo’\n####’$(date″+%m/%d%H∶%M∶%S″)″${*}″’####’}log0.timportcrawleddata  Log0.1Createline_ad4anduniqueindexinpreparationfor’crawl’importtsql-d$DB#droptableline_ad4;createtablelinead4(idcounter,  ad_urlvarchar(300),crawltitlevarchar(750),crawlmetavarchar(500),crawlbodyvarchar(8000))idropindexidx4ad_url;createuniqueindexidx4ad_urlonline_ad4(adurl);!timport-database$DB-table$CRAWLTABLE-s/home/goto/rs/DONE/crawl.sch-file$CRAWLDATA  Log1.extractline_adsfromlive_ADMNintocolumndelimitedspoolfileumpadm$SPOOL  Log2.timport-database$DB-table$TMPTABLE-snewrs.sch-file${SPOOL}timport-database$DB-table$TMPTABLE-snewrs.sch-file${SPOOL}  Log3.buildcanonindexon$TMPTABLE##tsql-d${DB}#dropindexidxOcst;createindexidxOcston$(TMPTABLE}(cannonsearchtext);!  Log4.addcountsofcanonsto$TMPTABLEtexisDB=$DBTMPTABLE=$TMPTABLEupdatecnt  Log5.buildurlindexon$TMPTABLEtsql-d${DB}<<!dropindexidxOurl;createindexidxOurlon${TMPTABLE}(ad_url);  Log6.mergecrawledtextw/originaltsql-d${DB}<<!dropindexidx4url;createindexidx4urlon${CRAWLTABLE}(ad_url);droptable$TMPTABLE2;  CREATETABLE$TMPTABLE2  AS  SELECTa.priceprice,a.ratingrating,a.ad_idad_id,a.bit-datebid-date,a.raw_search_textraw_search_text,a.cannon_search_textcannon_search_text.a.adspectitleadspectitle,a.ad_spec_descad_spec_desc,a.ad_urlad_url,a.resourceresource_id,b.crawltitlecrawltitle,b.crawlmetacrawlmeta,b.crawlbodycrawlbody,a.canoncntfrom$TMPTABLEa,$CRAWLTABLEbwherea.adurl=b.adurlorderbypricedesc;#texisDB=$DBCRAWLTABLE=$CRAWLTABLETMPTABLE=$TMPTABLEupdateit  Log7.collapse0onto01  Log7.1first-makethetabletsql-d$(DB}#!droptable${NEWTABLE};tsql-d${DB)<<!createtable${NEWTABLE}(canoncntinteger,cannon_search_textvarchar(50),raw_search_textvarchar(50),advertiser_idsvarchar(4096),advertiser_cntinteger,wordsvarchar(65536));!  Log7.2second,buildtheuniq,sortedlistofsearchterms  Log7.2selectcannon-search-textfrom${TMPTABLE};tsql-d${DB}<<!#sort-uItimport-stermstable.sch-fileselectcannonsearchtextfrom${TMPTABLE};  Log7.3third,builduniqindexontermstable  Log7.3createuniqueindexidxtermontermstermtsql-d$(DB}<<!createuniqueindexidxtermonterms(term);  Log7.3.9prepareforcollapse  Log7.3.9createindexidxcstcolon$TMPTABLE2cannon_search_text  Log7.3.9createindexidxadidcolon$TMPTABLE2adidtsql-d${DB}<<!createindexidxcstcolon$TMPTABLE2(cannon_search_text);createindexidxadidcolon$TMPTABLE2(ad_id);!  Log7.4fourthcollapsearoundcsts  Log7.4texisSRCTABLE=$TMPTABLE2TGTTABLE=$NEWTABLE  TERMSTABLE=$TERMSTABLEcollapsetexisdb=$DBSRCTABLE=$TMPTABLE2TGTTABLE=$NEWTABLE  TERMSTABLE=$TERMSTABLEcollapse  Log8dothepornlinebuildporn#timport-database$DB-table$NEWTABLE-srsporn.schfile  Log9dotheporntablenewporn#timport-database$DB-srsnewporn.sch-file  Log10metamorphindexwordscolumntsql-d$DB<<!createmetamorphinvertedindexmmx${INC)won${NEWTABLE}(words);  Log10alldone  Dumpsbid-for-placementsearchlistingsdata#!/bin/ksh  TXSORAUSER=XXXXXXXTXSORAPWD=XXXXXXXLVSRVPWD=XXXXXX#SPOOL=pipe  SPOOL=${1}  SERVER=XXXXXX  Log(){echo’\n####’$(date″+%m/%d%H∶%M∶%S″)″${1}″’####’)  Log″startdump″sqlplus-S${TXSORAUSER}/${TXSORAPWD}&amp;commat;1#{SERVER}>/dev/null!//setheadingoffsetlinesize750setpagesize0setarraysize1setmaxdata50000setbuffer50000setcrtoff;settermoutoffspool$(SPOOL)selectrpad(to_char(advertiser_id),8)11rpad(raw_search,30)#rpad(canon-search,30)#rpad(title,100)#rpad(description,280)#rpad(url,200)#rpad(resource_id,20)#rpad(to_char(price*100),5)11rpad(rating,2)11rpad(to_char(search_id),8)#rpad(resource_id,18)#rpad(to_char(line_ad_id),8)11to_char(bid_date,’YYYYMMDDHHMMSS’)fromadswherestatus=5andrating=’G’andcanon_search<?。尽痝rabbag’andrownum<10000;spooloff;quit;  Log″enddump″exit0  Counts#ofoccurancesofpagebidsforeachparticularpotentialrelatedsearchresult<scriptlanguage=vortex><timeout=-1></timeout><aname=main><DB=″/home/goto/crawldb″><SQLROW″selectdistinctcannonsearchtextcstfrom″$TMPTABLE><SQLROW″selectcount(*)cntfrom″$TMPTABLE″wherecannon_search_text=$cst″><SQLNOVARS″update″$TMPTABLE″setcanon_cnt=$cntwherecannon_search_text=$cst″></SQL></SQL></SQL></a></script>  Aggregateswebpagebody-textandlistingsbasedontherelated-searchresult,whilecollectingandcreatingderived-dataof1,howmanydifferentadvertisershaveweb-pagesassociatedwiththerelated-searchresult.基于相關(guān)的搜索結(jié)果,總的網(wǎng)頁文字字和列表,同時收集和創(chuàng)建導(dǎo)出的數(shù)據(jù)l,多少不同的廣告商具有與該相關(guān)的搜索結(jié)果相關(guān)的網(wǎng)頁 ?。約criptlanguage=vortex><timeout=-1></timeout><DB=/home/goto/crawldb><aname=main><!--getallcanon-termsfromtmptable--><SQLROW″selecttermcstfrom″$TERMSTABLE><$words=><$rsts=><$csts=><$asts=><$asds=><$cts=><$cms=><$cbs=><$advs=><$last_adv=><$adv_cnt=0><!--getallrowsw/thiscanontermfromtmptable--><SQLROW″selectcanon-centcc,ad_idaid,raw-search-textrst,cannon_search_textcts,ad_spec_titleast,.ad_spec_descasd,crawltitlect,crawlbodycb,crawlmetacmfrom″$SRCTABLE″wherecannon_search_text=$cstorderbyadid″><!--aggregatethetexttoprepareforcollapsedinsert--><$rsts=t$rsts+”+$rst)><$rsts=($csts+”+$cst)><$asts=($asts+”+$ast)><$asds=($adsds+”+$asd)><$cts=($cts+”+$ct)><$cms=($cms+”+$cm)><$cbs=($cbs+”+$cb)><if$aid?。?last_adv><!--addadvertisertolistifnotseenhimbefore--><$advs=($advs+”+$aid)><$adv_cnt=($adv_cnt+1)><$lastadv=$aid></if></SQL><$canon_cnt=$loop><$words=($rsts+”+$csts+”+$asts+”+$asds+”+$cms+”+$cbs+”+$cts)><!--pickoffzeroethelementonlyfrom$rstarray--><loop$rst><$Rst=$rst><break></loop><strlen$words><$wlen=$ret><strlen$advs><!--displaywhichrowwe’reworkingon-->$wlen$ret$cst<!--inserttocollapsedrow--><SQLNOVARS″insertinto″$TGTTABLE″(canon_cnt,cannon_search_text,raw_search_text,advertiser_ids,advertiser_cnt,words)VALUES($cc,$cst,$Rst,$advs,$adv_cnt,$words)″></SQL><!--$words***<$ret=(text2mm($words,50))>$ret--></SQL></a></script>  Databaseschemalayoutusedtouploadbiddedsearchlistings用來載入競買的搜索列表的數(shù)據(jù)庫大綱布局  database/home/goto/crawldb#droptablelineadldroptablelinead0tablelinead0createtablecol#keepfirsttrimspace#multipledatefmtyyyymmddHHMMSS#NameTypeTagdefaultvalfieldadvertiseridvarchar(8)1-8fieldraw-search-textvarchar(40)9-48fieldcannon_search_textvarchar(40)49-88fieldad_spec_titlevarchar(100)89-188fieldadspecdescvarchar(2000)189-2188fieldadurlvarchar(200)2189-2388fieldresourcevarchar(20)2389-2408fieldpriceinteger2409-24130fieldratingchar(2)2414-2415fieldad_idihteger2416-24230fieldbid-datedate2424-24380fieldcanon_cntinteger-0fieldcrawlwordsvarchar(40)  Manualjoinofsearchlistingdatawithcrawledwebpagedataintoasinglemergedtable手工將搜索列表數(shù)據(jù)與搜索(crawl)過的網(wǎng)頁數(shù)據(jù)連接到一單個的合并表中 ?。約criptlanguage=vortex><timeout=-1></timeout><aname=main><DB=″/home/goto/crawldb″><SQLROW″selectad_urlmyurl,crawltitlect,crawlmetacm,crawlbodycbfrom″$CRAWLTABLE><SQLNOVARS″update″$TMPTABLE″setcrawltitle=$ct,crawlmeta=$cm,crawlbody=$cbwheread_url=$myurl″></SQL></SQL></a></script>  CodetoduplicateURLCrawlelimination完全相同URL搜索(crawl)消除的代碼  /***Insertthetype’sdescriptionhere.這里插入類型的說明  *Creationdate(02/18/2000111212AM)創(chuàng)建時間*&amp;commat;author*/  importjava.io.*;//importofjavaclassesneededforinput/output用于輸入/輸出所需的Java類的輸入  importjava.util.*;//importcorejava.*;importjava.lang.String;publicclassUrl{/******************************************************************CompareURLsAddress比較URLs地址******************************************************************/publicstaticvoidmain(Stringargs[])throwsException{//DecalarationsoftheinputandoutputFile輸入和輸出文件的Decalaration  BufferedReaderinputFile;  PrintWriternonDupFile;  PrintWriterdupFile;//Initialization初始化  StringfirstUrl=″″;  StringsecondUrl=″″;  StringurlBufferA,urlBufferB=″″,urlBufferC=″″;  StringcompareDomainA=″″;  StringcompareDomainB=″″;  StringcompareDomainC=″″;  StringnewFlag=″false″;inputFile=newBufferedReader(new  FileReader(″/home/lauw/urls.lau″));nonDupFile=newPrintWriter(newFileWriter(″/home/lauw/nonDupFile.real″));dupFile=newPrintWriter(new  FileWriter(″/home/lauw/dupFile.real″));nonDupFile.close();dupFile.close();firstUrl=inputFile.readLine();secondUrl=inputFile.readLine();urlBufferC=inputFile.readLine();urlBufferA=firstUrl;urlBufferB=secondUrl;do  SlashCcompareDomainA=newSlash();  SlashccompareDomainB=newSlash();  SlashccompareDomainC=newSlash();compareDomainA=ccompareDomainA.Slash(urlBufferA);compareDomainB=ccompareDomainB.Slash(urlBufferB);compareDomainC=ccompareDomainC.Slash(urlBufferC);ComparecompareSub=newCompare();newFlag=compareSub.Compare(compareDomainA,compareDomainB,compareDomainC,urlBufferB,newFlag);urlBufferA=urlBufferB;urlBufferB=urlBufferC;urlBufferC=inputFile.readLine();}while(urlBufferC!=null);///////////////////////////LoopforfirstNullvalue用于第一Null值的循環(huán)  urlBufferC=firstUrl;  SlashccompareFirstNullDomainA=newSlash();  SlashccompareFirstNullDomainB=newSlash();  SlashccompareFirstNullDomainC=newSlash();compareDomainA=ccompareFirstNullDomainA.Slash(urlBufferA);compareDomainB=ccompareFirstNullDomainB.Slash(urlBufferB);compareDomainC=ccompareFirstNullDomainC.Slash(urlBufferC);  ComparecompareFirstNullSub=newCompare();newFlag=compareFirstNullSub.Compare(compareDomainA,compareDomainB,compareDomainC,urlBufferB,newFlag);/////////////////////////LoopforlastNullvalue用于最后的Null值的循環(huán)  urlBufferA=urlBufferB;urlBufferB=firstUrl;urlBufferC=secondUrl;  SlashccompareLastNullDomainA=newSlash();  SlashccompareLastNullDomainB=newSlash();  SlashccompareLastNullDomainC=newSlash();compareDomainA=ccompareLastNullDomainA.Slash(urlBufferA);compareDomainB=ccompareLastNullDomainB.Slash(urlBufferB);compareDomainC=ccompareLastNullDomainC.Slash(urlBufferC);  ComparecompareLastNullSub=newCompare();newFlag=compareLastNullSub.Compare(compareDomainA,compareDomainB,compareDomainC,urlBufferB,newFlag);inputFile.close();}}classSlash(  StringSlash(Stringbuffer){intdomainSlashEnd=0;intdomainSlashStart=0;booleandomainIndex=false;booleanstartFound=false;booleannewFlag=false;  Stringcomparedomain;comparedomain=″’;for(intdomainSlashLoop=8;domainSlashLoop<=(buffer.length()-l);domainSlashLoop++){if((buffer.substring(domainSlashLoop,(domainSlashLoop+l)).equals(″/″))(buffer.substring(domainSlashLoop,(domainSlashLoop+l)).equals(″?″)))(if(startFound==false){///ChecktheUrlswithDomainNameonly僅用域名核對該URLs  if((domainSlashLoop+l)==buffer.length()){comparedomain=buffer.substring(0,(buffer.length()));domainIndex=true;domainSlashLoop=buffer.length()+500;}//endfordomainnameonly僅結(jié)束域名  domainSlashStart=domainSlashLoop+1;startFound=true;}else{domainSlashEnd=domainSlashLoop;domainSlashLoop=buffer.length()+500;///add5togetoutoftheloop加5來退出循環(huán)  }}//endforLoop結(jié)束循環(huán)  if(domainSlashEnd==0)domainSlashEnd=buffer.length();}if(domainIndex==false){comparedomain=buffer.substring(domainSlashStart,domainSlashEnd);}}returncomparedomain;})importjava.io.*;//importofjavaclassesneededforinput/outputclassCompare用于輸入類比較所需的Java類的輸入  {  StringCompare(StringaCompareDomainA,,StringaCompareDomainB,  StringaCompareDomainC,StringaUrlBufferB,StringnewFlag)throws  Exception(  PrintWriternonDupFile;  PrintWriterdupFile;nonDupFile=newPrintWriter(new  FileWriter(″/home/lauw/nonDupFile.real″,true),true);dupFile=newPrintWriter(new  FileWriter(″/home/lauw/dupFile.real″,true),true);if(aCompareDomainC.equals(aCompareDomainB))if(newFlag.equals(″true″))(dupFile.println(″New″);newFlag=″false″;}  System.out.println(″Duplicate″);dupFile.println(aUrlBufferB);}else{if(aCompareDomainB.equals(aCompareDomainA))if(newFlag.equals(″true″)){dupFile.println(″New″);newFlag=″false″;}  System.out.println(″printaDuplicatinsecondtime″);  System.out.println(″SecDuplicate″);dupFile.println(aUrlBufferB);}else  System.out.println(″nonDup″);nonDupFile.println(aUrlBufferB);newFlag=″true″;}  System.out.println(″***************************************s,);}  returnnewFlag;  }  }]]></pre>權(quán)利要求1.一種生成一搜索結(jié)果列表的方法,該方法包括從一搜索者接收一搜索請求;在一按業(yè)績付費(fèi)數(shù)據(jù)庫中包括多個搜索列表,識別生成與該搜索請求匹配的搜索列表;在一相關(guān)的搜索數(shù)據(jù)庫中包括從該按業(yè)績付費(fèi)數(shù)據(jù)庫生成的相關(guān)的搜索列表,識別與該搜索請求關(guān)聯(lián)的相關(guān)的搜索列表;以及將一搜索結(jié)果列表返回給該搜索者,包括識別的搜索列表以及一個或多個識別的相關(guān)的搜索列表。2.如權(quán)利要求1所述的方法,其中識別相關(guān)的搜索列表包括搜索該按業(yè)績付費(fèi)數(shù)據(jù)庫的一倒排索引;以及基于該按業(yè)績付費(fèi)數(shù)據(jù)庫,搜索元信息的一索引。3.如權(quán)利要求1所述的方法,進(jìn)一步包括按與該搜索請求的關(guān)聯(lián)排序識別的相關(guān)的搜索列表;選擇一預(yù)定數(shù)量的識別的相關(guān)的搜索列表作為最關(guān)聯(lián)的相關(guān)的搜索列表;以及返回在該搜索結(jié)果列表中的最關(guān)聯(lián)的相關(guān)的搜索列表。4.如權(quán)利要求3所述的方法,其中排序包括根據(jù)搜索請求的一查詢術(shù)語的出現(xiàn)的頻率,在相關(guān)的搜索列表中選擇識別的相關(guān)的搜索列表。5.如權(quán)利要求3所述的方法,其中排序包括根據(jù)搜索請求的一個或多個查詢術(shù)語的近似度,在該相關(guān)的搜索列表中選擇識別的相關(guān)的搜索列表。6.如權(quán)利要求3所述的方法,其中排序包括根據(jù)預(yù)定的加權(quán)標(biāo)準(zhǔn),加權(quán)相關(guān)的搜索列表;以及根據(jù)相關(guān)的搜索列表的加權(quán),選擇識別的相關(guān)的搜索列表。7.如權(quán)利要求6所述的方法,其中加權(quán)相關(guān)的搜索列表包括增加包括由一廣告商標(biāo)識的競買的一個或多個搜索項(xiàng)的一相關(guān)的搜索列表的相對加權(quán)。8.如權(quán)利要求6所述的方法,其中加權(quán)相關(guān)的搜索列表包括增加包含在由一廣告商標(biāo)識的一搜索列表的一說明中的一相關(guān)的搜索列表的相對加權(quán)。9.如權(quán)利要求6所述的方法,其中加權(quán)相關(guān)的搜索列表包括增加包含在由一廣告商標(biāo)識的一搜索列表的一標(biāo)題中的一相關(guān)的搜索列表的相對加權(quán)。10.如權(quán)利要求6所述的方法,其中加權(quán)相關(guān)的搜索列表包括增加包含在由一廣告商保持的一網(wǎng)頁的元標(biāo)簽關(guān)鍵詞中的一相關(guān)的搜索列表的相對加權(quán)。11.如權(quán)利要求6所述的方法,其中加權(quán)相關(guān)的搜索列表包括增加包含在由一廣告商維護(hù)的一網(wǎng)頁的文字?jǐn)?shù)據(jù)中的一相關(guān)的搜索列表的相對加權(quán)。12.如權(quán)利要求3所述的方法,其中排序包括根據(jù)相關(guān)的搜索列表的分布,排列相關(guān)的搜索列表;以及根據(jù)相關(guān)的搜索列表的等級,選擇識別的相關(guān)的搜索列表。13.如權(quán)利要求12所述的方法,其中排列包括識別包含在相關(guān)的搜索列表中的關(guān)鍵信息;以及根據(jù)在相關(guān)的搜索列表中出現(xiàn)的關(guān)鍵信息,增加一相關(guān)的搜索列表的等級。14.如權(quán)利要求13所述的方法,其中識別關(guān)鍵信息包括檢測在相關(guān)的搜索列表中的字段性的廣告商數(shù)據(jù);以及檢測在相關(guān)的搜索列表中的搜索后的數(shù)據(jù)。15.一個系統(tǒng),包括一按業(yè)績付費(fèi)數(shù)據(jù)庫;至少部分使用該按業(yè)績付費(fèi)數(shù)據(jù)庫形成的一相關(guān)的搜索數(shù)據(jù)庫;以及一服務(wù)器,與該按業(yè)績付費(fèi)數(shù)據(jù)庫和該相關(guān)的搜索數(shù)據(jù)庫耦合,該服務(wù)器響應(yīng)一搜索者的一搜索請求,用來從該按業(yè)績付費(fèi)數(shù)據(jù)庫選擇第一組搜索結(jié)果以及從該相關(guān)的搜索數(shù)據(jù)庫選擇第二組搜索結(jié)果。16.如權(quán)利要求15所述的系統(tǒng),其中該按業(yè)績付費(fèi)數(shù)據(jù)庫包括多個搜索列表,每個搜索列表包括一搜索項(xiàng),一競買金額,以及一統(tǒng)一資源定位器,與遠(yuǎn)離該系統(tǒng)的一網(wǎng)絡(luò)服務(wù)器上的一文檔的一地址一致。17.如權(quán)利要求16所述的系統(tǒng),其中該相關(guān)的搜索數(shù)據(jù)庫包括多個相關(guān)的搜索列表,每個相關(guān)的搜索列表包括一關(guān)鍵詞,與該按業(yè)績付費(fèi)數(shù)據(jù)庫的一個文檔以及該文檔的文字相關(guān)。18.如權(quán)利要求17所述的系統(tǒng),其中多個搜索列表的每個搜索列表進(jìn)一步包括描述性文字,描述該文檔,一標(biāo)題,以及元標(biāo)簽,與該文檔相關(guān)。19.如權(quán)利要求18所述的系統(tǒng),其中每個搜索列表包括該描述性文字與文檔相關(guān);該標(biāo)題,與該文檔相關(guān);以及所述元標(biāo)簽,與該文檔相關(guān)。20.一種用于響應(yīng)對包括多個搜索列表的一按業(yè)績付費(fèi)數(shù)據(jù)庫的一搜索請求,形成用于識別相關(guān)的搜索的一相關(guān)的搜索數(shù)據(jù)庫的方法,該方法包括將由該按業(yè)績付費(fèi)數(shù)據(jù)庫的一搜索列表引用的每個網(wǎng)頁存儲為一相關(guān)的搜索數(shù)據(jù)庫輸入文字;為該相關(guān)的搜索數(shù)據(jù)庫輸入創(chuàng)建一倒排索引;以及創(chuàng)建用于與該按業(yè)績付費(fèi)數(shù)據(jù)庫的每個搜索列表相關(guān)的關(guān)健信息的一索引。21.如權(quán)利要求20所述的方法,其中存儲包括響應(yīng)用于由該按業(yè)績付費(fèi)數(shù)據(jù)庫的搜索列表引用的兩個或多個網(wǎng)頁的統(tǒng)一資源定位器的根路徑部分以及查詢自變量,識別相似的網(wǎng)頁。22.如權(quán)利要求21所述的方法,其中識別相似的網(wǎng)頁包括識別一第一網(wǎng)頁的第一關(guān)鍵詞;識別一第二網(wǎng)頁的第二關(guān)鍵詞;以及比較第一關(guān)鍵詞以及第二關(guān)鍵詞;當(dāng)?shù)谝魂P(guān)鍵詞和第二關(guān)鍵詞具有一預(yù)定的關(guān)系時,將第一網(wǎng)頁和第二網(wǎng)頁識別為相似的網(wǎng)頁。23.一種用于搜索在包括來自因特網(wǎng)站點(diǎn)的因特網(wǎng)數(shù)據(jù)的一數(shù)據(jù)庫中的數(shù)據(jù)的方法,該方法包括形成與將被訪問的因特網(wǎng)站點(diǎn)有關(guān)的統(tǒng)一資源定位器(URLs)的一列表;從該列表移出完全相同的URLs;如果在該列表上的一URL與在該列表上的另一URL相似,搜索多個預(yù)定的可能的完全相同的URLs;將在該列表上的URL體與該可能完全相同的URLs比較;如果在該列表上的URL體與該可能完全相同的URL相似;掛起該可能完全相同的URLs的搜索,以及為以后搜索在該數(shù)據(jù)庫中在該列表上存儲該URL體。24.如權(quán)利要求23所述的方法,進(jìn)一步包括將一選定的URL與在該列表上的其他URLs比較;以及當(dāng)該URL具有與在該列表上的其他URL一樣的一預(yù)定的文字部分,確定該URL與在該列表上的其他URL相似。25.如權(quán)利要求23所述的方法,其中將在該列表上的URL體與可能完全相同的URLs比較包括將來自該列表上的URL的文字與來自一個可能完全相同的URL的文字比較;以及當(dāng)來自該列表上的URL的文字與來自該可能完全相同的URL的文字共同具有一預(yù)定的文字部分,確定在該列表上的URL與該可能完全相同的URL相似。全文摘要一種生成一搜索結(jié)果列表并為一搜索者提供相關(guān)的搜索的的方法。生成與由該搜索者提交的一搜索請求的一匹配的搜索列表在包括多個搜索列表的一按業(yè)績付費(fèi)數(shù)據(jù)庫中被識別。包含在由該按業(yè)績付費(fèi)數(shù)據(jù)庫生成的一相關(guān)的搜索數(shù)據(jù)庫中的相關(guān)的搜索列表被識別為與該搜索請求有關(guān)。包括所識別的搜索列表和一個或多個所識別的搜索列表的一搜索結(jié)果列表被返回給該搜索者。文檔編號G06Q50/00GK1430751SQ01809998公開日2003年7月16日申請日期2001年5月18日優(yōu)先權(quán)日2000年5月22日發(fā)明者P·G·羅雷克斯,T·A·索拉尼勒,B·R·豪加爾德申請人:奧弗圖爾服務(wù)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
广州市| 双峰县| 河源市| 安仁县| 巴中市| 赞皇县| 丰都县| 闸北区| 绵阳市| 斗六市| 车险| 张家口市| 寻甸| 吴堡县| 民丰县| 剑阁县| 灌南县| 鄂尔多斯市| 黎川县| 金门县| 灯塔市| 开远市| 鹤峰县| 广安市| 旺苍县| 小金县| 蕉岭县| 普格县| 图木舒克市| 罗山县| 宁明县| 临桂县| 抚州市| 无棣县| 肇源县| 中阳县| 百色市| 万盛区| 温泉县| 陇川县| 唐山市|