亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

PHP中基于Linux的搜索引擎實(shí)現(xiàn)

添加時間:2014-7-20 17:56:31  添加: 思海網(wǎng)絡(luò) 

  搜索引擎是為用戶提供快速獲取網(wǎng)頁信息的工具,其主要的功能是系統(tǒng)通過用戶輸入關(guān)鍵字,檢索后端網(wǎng)頁數(shù)據(jù)庫,將相關(guān)網(wǎng)頁的鏈接和摘要信息反饋給用戶。從搜索的范圍上一般分為站內(nèi)網(wǎng)頁搜索和全局網(wǎng)頁搜索。隨著網(wǎng)頁數(shù)量的急劇增加,搜索引擎已經(jīng)成為上網(wǎng)查詢信息的必須手段,各個大型網(wǎng)站均已經(jīng)提供網(wǎng)頁數(shù)據(jù)搜索服務(wù),并且出現(xiàn)了許多為大型網(wǎng)站提供專業(yè)搜索引擎服務(wù)的公司,如為Yahoo提供搜索服務(wù)的Google,為新浪網(wǎng)和263等國內(nèi)網(wǎng)站提供服務(wù)的百度公司等。專業(yè)的搜索服務(wù)費(fèi)用高而免費(fèi)的搜索引擎軟件基本都是基于英文的檢索,所以都不太適合Intranet環(huán)境(如校園網(wǎng)等)的需要。

  搜索引擎的基本組成一般分為網(wǎng)頁收集程序、網(wǎng)頁后端數(shù)據(jù)組織存儲、網(wǎng)頁數(shù)據(jù)檢索三部分。決定搜索引擎好壞的關(guān)鍵因素是數(shù)據(jù)查詢的響應(yīng)時間,即如何組織好滿足全文檢索需要的大量網(wǎng)頁數(shù)據(jù)。

  GNU/Linux作為一個優(yōu)秀的網(wǎng)絡(luò)操作系統(tǒng),其發(fā)行版本中集成了大量的網(wǎng)絡(luò)應(yīng)用軟件,如 Web服務(wù)器(Apache + PHP)、目錄服務(wù)器(OpenLDAP)、腳本語言(Perl)、網(wǎng)頁收集程序(Wget)等。所以,通過將它們集中進(jìn)行應(yīng)用,便可以實(shí)現(xiàn)一個簡單、高效的搜索引擎服務(wù)器。

  一、基本組成和使用方法

  1、網(wǎng)頁數(shù)據(jù)收集

  Wget程序是一個優(yōu)秀的網(wǎng)頁收集程序,它采用多線程設(shè)計(jì)能夠方便地將網(wǎng)站內(nèi)容鏡像到本地目錄中,并且能夠靈活定制收集網(wǎng)頁的類型、遞歸收集層次、目錄限額、收集時間等。通過專用的收集程序完成網(wǎng)頁的收集工作,既降低了設(shè)計(jì)的難度又提高了系統(tǒng)的性能。為了減小本地數(shù)據(jù)的規(guī)模,可只收集能夠查詢的html文件、txt文件、腳本程序asp和php只使用缺省的結(jié)果,而不收集如圖形文件或是其他的數(shù)據(jù)文件。

  2、網(wǎng)頁數(shù)據(jù)過濾

  由于html文件中存在大量的標(biāo)記,如<body><table>等,這些標(biāo)記數(shù)據(jù)沒有實(shí)際的搜索價值,所以加入數(shù)據(jù)庫前必須對收集的數(shù)據(jù)進(jìn)行過濾。Perl作為廣泛使用的腳本語言,擁有非常強(qiáng)大而豐富的程序庫,可以方便地完成網(wǎng)頁的過濾。通過使用HTML-Parser庫可以方便地提取出網(wǎng)頁中包含的文字?jǐn)?shù)據(jù)、標(biāo)題數(shù)據(jù)、鏈接數(shù)據(jù)等。該程序庫可以在www.cpan.net中下載,并且該網(wǎng)站收集的Perl程序涉及范圍之廣,遠(yuǎn)遠(yuǎn)超出我們的現(xiàn)象。

  3、目錄服務(wù)

  目錄服務(wù)是針對大量數(shù)據(jù)檢索需要開發(fā)的服務(wù),最早出現(xiàn)在X.500協(xié)議集中,后來擴(kuò)展到TCP/IP中發(fā)展成為LDAP(Lightweight Directory Acess Protocol)協(xié)議,其相關(guān)的標(biāo)準(zhǔn)為1995年制定的RFC1777和1997年制定的RFC2251等。LDAP協(xié)議已經(jīng)作為工業(yè)標(biāo)準(zhǔn)被Sun、Lotus、微軟等公司廣泛應(yīng)用到其相關(guān)產(chǎn)品中,但是專用的基于Windows平臺的目錄服務(wù)器卻較少見,OpenLDAP是免費(fèi)的運(yùn)行于Unix系統(tǒng)的目錄服務(wù)器,其產(chǎn)品的性能優(yōu)秀,已經(jīng)被許多的Linux發(fā)行版本收集(Redhat、Mandrake等),并且提供了包括C、Perl、PHP等的開發(fā)接口。

  使用目錄服務(wù)技術(shù)代替普通的關(guān)系數(shù)據(jù)庫作為網(wǎng)頁數(shù)據(jù)的后端存取平臺主要基于目錄服務(wù)的技術(shù)優(yōu)勢。目錄服務(wù)簡化了數(shù)據(jù)處理類型,去掉了通用關(guān)系數(shù)據(jù)庫的費(fèi)時的事務(wù)機(jī)制,而是采用全局替換的策略對數(shù)據(jù)進(jìn)行更新,其應(yīng)用的重點(diǎn)是大量數(shù)據(jù)的檢索服務(wù)(一般數(shù)據(jù)更新和檢索的頻率比例要求在1:10以上),強(qiáng)調(diào)檢索速度和全文查詢,提供完整的數(shù)據(jù)備份,非常適合搜索引擎之類服務(wù)的需要。從目錄服務(wù)技術(shù)解決問題的重點(diǎn)不難看出其在數(shù)據(jù)檢索上的優(yōu)勢,它的提出時間遠(yuǎn)遠(yuǎn)落后于關(guān)系數(shù)據(jù)庫的提出時間,實(shí)際上反映了根據(jù)具體問題優(yōu)化數(shù)據(jù)解決方案的原則。這與目前廣泛存在的凡是涉及大量數(shù)據(jù)處理必選SQL Server的處理方法形成鮮明對比。

  通過選用成熟的目錄服務(wù)技術(shù)提高網(wǎng)頁查詢的效率,能夠簡潔有效地提高數(shù)據(jù)處理能力。這也充分顯示了GNU/Linux系統(tǒng)運(yùn)行開放軟件的優(yōu)勢,畢竟不能方便地獲得運(yùn)行于其他平臺的目錄服務(wù)器。

  4、查詢程序設(shè)計(jì)

  搜索引擎的前端界面是網(wǎng)頁,用戶通過在特定的網(wǎng)頁中輸入關(guān)鍵字提交給Web服務(wù)器進(jìn)行處理。運(yùn)行在Apache Web服務(wù)器上的PHP腳本通過運(yùn)行其相關(guān)ldap函數(shù)便可以執(zhí)行關(guān)鍵字的查詢工作。主要進(jìn)行的工作是根據(jù)關(guān)鍵字構(gòu)造查詢、向目錄服務(wù)器提交查詢、顯示查詢結(jié)果等。Linux + Apache + PHP作為廣泛使用Web服務(wù)器,與WinNT + IIS + ASP相比其性能毫不遜色,在目前的Linux發(fā)行版本中都集成了Apache + PHP 以及缺省的ldap、pgsql、imap等模塊。

  5、計(jì)劃任務(wù)

  搜索引擎的網(wǎng)頁數(shù)據(jù)收集、數(shù)據(jù)過濾、加入目錄數(shù)據(jù)庫等工作都應(yīng)該是自動完成的,在UNIX系統(tǒng)中有cron進(jìn)程來專門完成按照特定時間調(diào)度任務(wù),為了不影響系統(tǒng)的運(yùn)行,一般可以把這些工作安排到深夜進(jìn)行。

  二、具體步驟和注意事項(xiàng)

  1、配置Wget軟件

  在RedHat 6.2發(fā)行版中已經(jīng)集成了該軟件包,可以直接進(jìn)行安裝。將需要鏡像的站點(diǎn)地址編輯為一個文件中,通過 -I 參數(shù)讀入該文件;為鏡像的站點(diǎn)指定一個本地下載目錄;為了避免內(nèi)部網(wǎng)中鏈接的重復(fù)引用,一般只鏡像該站點(diǎn)內(nèi)的數(shù)據(jù);還可以根據(jù)網(wǎng)站的具體情況,指定其鏡像的深度。

  2、配置Openldap服務(wù)

  在RedHat 6.2發(fā)行版中已經(jīng)集成了Openldap-1.2.9,其配置文件存放在/etc/openldap的目錄中。主要的配置文件是slapd.conf,關(guān)鍵要打開對檢索速度至關(guān)重要的index選項(xiàng),可以使用setup工具,將ldap在系統(tǒng)引導(dǎo)后作為缺省服務(wù)啟動。

  Ldap服務(wù)可以通過文本文件方式存放數(shù)據(jù),即LDIF文件格式。使用此方式可以高效地更新目錄服務(wù)數(shù)據(jù),需要注意LDIF格式是通過空行對數(shù)據(jù)進(jìn)行分隔的,并且通過運(yùn)行l(wèi)dif2lbm將LDIF格式數(shù)據(jù)導(dǎo)入目錄數(shù)據(jù)庫中時需要暫停目錄服務(wù)。

  3、編制數(shù)據(jù)過濾和LDIF文件生成腳本

  為了方便地過濾網(wǎng)頁數(shù)據(jù),可以調(diào)用Perl的HTML-Parser庫函數(shù),該程序包下載后需要進(jìn)行編譯,在eg目錄下生成了相關(guān)的htext,htitle程序,在Perl中可以通過調(diào)用外部程序的方式運(yùn)行該程序,并對其過濾結(jié)果通過重定向的方法生成臨時文件。本搜索引擎設(shè)計(jì)的目錄數(shù)據(jù)屬性有dn 、link、title、modifydate、contents,其中的dn通過Link進(jìn)行唯一性標(biāo)識,將過濾后的網(wǎng)頁文本內(nèi)容通過/usr/sbin/ldif程序進(jìn)行自動編碼后放入LDIF文件中。

  基本的LDIF文件格式如下:

dn: dc=27jd,dc=zzb 
objectclass: top 
objectclass: organization 
  
dn: link= http://freemail.27jd.zzh/index.html, dc=27jd ,dc=zzb 
link: http://freemail.27jd.zzh/index.html 
title: Webmail主頁 
modifydate: 2001年2月8日 
contents:: 
CgpXZWJtYWls1vfSswoKCgoKIKHvoaG7ttOtyrnTw1dlYm1haWzPtc2zoaGh7yDO0t 
KqyerH69PKz+QhISFPdXRsb29rxeTWw6O6U01UUDogZnJlZW1haWwuMjdqZC56emJQ 
T1AzOiBmcm 
VlbWFpbC4yN2pkLnp6YkROUyA6IDExLjk5LjY0Ljiy4srU08O7p6O6bWFpbGd1ZXN00 
8O7p7/awe 
6jum1haWxndWVzdNLR16Ky4dPDu6cg08O7p8P7OkAgZnJlZW1haWwuMjdqZC56emK/ 
2sHuOqChoa 
AgIKHyzOG5qbf+zvEgofKzo7z7zsrM4iCh8s2o0bbCvKHyICCh8sq1z9bUrcDtIKHywfTR1 
LK+of 
IgofK8vMr1sr/W99Kzsb7Ptc2z08nK1NHpvLzK9bK/zfjC59bQ0MS9qMGius3OrLukCgoK 
CqAKCg 
o= 
objectclass:webpage 
  
基本的slapd.conf文件如下: 
defaultaccess read 
include /etc/openldap/slapd.at.conf 
#include /etc/openldap/slapd.oc.conf 
schemacheck off 
sizelimit 20000 
pidfile /var/run/slapd.pid 
argsfile /var/run/slapd.args 
#######################################################################
# ldbm database definitions 
#######################################################################
database ldbm 
dbcachesize 1000000 
index contents,title 
suffix "dc=27jd, dc=zzb" 
directory /usr/tmp 
rootdn "cn=root,dc=27jd, dc=zzb" 
rootpw secret

  通過對一個4萬個網(wǎng)頁(約300M左右)的本地html文件目錄進(jìn)行過濾后生成的LDIF文件約180M左右,如果只取文字?jǐn)?shù)據(jù)的前400個字符作為網(wǎng)頁內(nèi)容,則生成文件約35M左右。

  4、配置PHP+LDAP服務(wù)

  在Redhat6.2中已經(jīng)集成了PHP3和php-ldap模塊,選擇完全安裝時便已經(jīng)安裝到/usr/lib/apache目錄中,注意檢查/etc/httpd/php3.ini中的動態(tài)擴(kuò)展(Dynamic Extensions)中的extension=ldap.so是否被選擇。PHP3中提供了豐富的LDAP存取函數(shù),能夠方便完成對目錄數(shù)據(jù)的搜索功能。有關(guān)Apach + PHP編程方面的資料較多,在此不在贅述。注意在PHP3中的LDAP搜索函數(shù)ldap_search不能處理其返回結(jié)果超過目錄服務(wù)設(shè)定的最大檢索數(shù)據(jù),所以可以根據(jù)具體情況,在slapd的配置文件中設(shè)定較大的檢索數(shù)據(jù)限制(sizelimit),此問題在PHP4中已經(jīng)解決。

  5、任務(wù)調(diào)度

  在Redhat6.2中已經(jīng)集成了crond并且缺省安裝后便已經(jīng)啟動。其相關(guān)配置文件有/etc/crontab、/etc/cron.daily、/etc/cron.hourly、/etc/weekly、/etc/monthly,你只需要根據(jù)數(shù)據(jù)的更新頻度,將網(wǎng)頁收集、網(wǎng)頁過濾、生成LDIF文件、停止目錄服務(wù)、更新目錄數(shù)據(jù)、重新啟動目錄服務(wù),作為一個簡單的Shell程序放入到相應(yīng)的目錄中即可。

  三、效果與思考

  以上簡單的介紹了我們的搜索引擎的實(shí)現(xiàn)方法和注意事項(xiàng),這僅僅是我們在對GNU/Linux了解得非常膚淺的情況下設(shè)計(jì)的以目錄服務(wù)為核心的滿足內(nèi)部網(wǎng)需要的搜索引擎系統(tǒng),并不能代表GNU/Linux和它集成的大量軟件的真正實(shí)力。

 通過在一臺安裝RedHat Linux 6.2 的Sparc Ultra 250上實(shí)際測試,對擁有4萬個網(wǎng)頁的目錄數(shù)據(jù)進(jìn)行搜索時,基于上述方法設(shè)計(jì)的搜索引擎響應(yīng)速度一般在3秒左右,目錄數(shù)據(jù)完全更新大約需要4小時左右,能夠滿足內(nèi)部網(wǎng)的需要。實(shí)際上,限制搜索響應(yīng)速度的關(guān)鍵是PHP3的ldap_search函數(shù)沒有提供數(shù)據(jù)限制的功能,導(dǎo)致在查詢結(jié)果集過大時系統(tǒng)響應(yīng)速度變慢,因?yàn)槊看斡脩裟軌驗(yàn)g覽的查詢結(jié)果實(shí)際是非常少的,而服務(wù)器端每次的查詢總是返回全部結(jié)果,在PHP4中的ldap_search通過指定sizelimit參數(shù),能夠有效解決該問題。

  目錄服務(wù)的應(yīng)用范圍非常廣泛,實(shí)際上作為大型的信息站點(diǎn)為了提高客戶訪問效率,都或多或少采用了目錄服務(wù)的技術(shù)。目錄服務(wù)根據(jù)具體的應(yīng)用需求的優(yōu)化設(shè)計(jì)方法,對我們決定應(yīng)用系統(tǒng)的開發(fā)無疑是一個啟發(fā),應(yīng)該說在基于索引信息的領(lǐng)域LDAP服務(wù)遠(yuǎn)遠(yuǎn)優(yōu)于傳統(tǒng)的關(guān)系數(shù)據(jù)庫系統(tǒng)。

  基于GNU/Linux進(jìn)行網(wǎng)絡(luò)服務(wù)器程序設(shè)計(jì),能夠充分體會到開放源代碼的魅力和實(shí)力,它既能夠簡化系統(tǒng)的設(shè)計(jì),又大大地提高了工作效率,同時也有效降低了系統(tǒng)的成本。程序設(shè)計(jì)由一切從零開始的復(fù)雜繁瑣的重復(fù)勞動,簡化為問題抽象、功能分解、查找資源、組合系統(tǒng)四個部分,更加強(qiáng)調(diào)對系統(tǒng)的認(rèn)識、開闊的視野和學(xué)習(xí)的能力,同時開放源代碼也為系統(tǒng)進(jìn)一步優(yōu)化提供了堅(jiān)實(shí)的基礎(chǔ)。

關(guān)鍵字:Linux、PHP、服務(wù)器

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項(xiàng)備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機(jī)打開網(wǎng)站