国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Elasticsearch 的校內(nèi)全文搜索平臺的研究與實現(xiàn)

2018-12-28 06:41:12欽蔣承沈宏良
現(xiàn)代計算機 2018年34期
關(guān)鍵詞:爬蟲分詞搜索引擎

欽蔣承,沈宏良

(湖州師范學(xué)院,湖州313000)

0 引言

在目前的國內(nèi)高校中,隨著數(shù)字校園的工作不斷推進,無紙化辦公的理念不斷深化,校園網(wǎng)絡(luò)中的各種新聞資訊、文檔、多媒體等數(shù)字資源呈現(xiàn)出爆發(fā)式的增長。這些數(shù)字資源能夠為師生的日常工作和學(xué)習提供有效幫助,但面對體量龐大的校園數(shù)字資源,使用人工查詢的方式無法快速的定位到所需資源所在的具體位置,而通用的搜索引擎例如百度、谷歌搜索很難對一個域內(nèi)的資源進行精準全面的搜索,非常不利于校內(nèi)用戶的搜索體驗;同時,這些校內(nèi)的信息資源分布在不同的服務(wù)器和存儲中,無法通過集中管理來有效分析利用這些信息資源,從而無法獲取數(shù)據(jù)背后的價值和知識。也就產(chǎn)生了所謂“數(shù)據(jù)富裕而信息貧瘠”的尷尬局面[1]。因此,有必要根據(jù)高校的校園網(wǎng)特色和本校用戶的搜索需求來定制一套全面、高效、精準且易用的搜索平臺。

針對當前現(xiàn)狀,本文基于對新型分布式數(shù)據(jù)管理和檢索核心ES 的研究學(xué)習,利用其強大的分布式數(shù)據(jù)管理能力和高效的實時文件存儲和索引機制,建立校內(nèi)全文搜索平臺。在此基礎(chǔ)上,根據(jù)校內(nèi)用戶實際的檢索需求,針對ES 索引模塊的中文分詞缺陷,搜索結(jié)果相關(guān)度不夠符合域內(nèi)用戶體驗的缺陷進行進一步的優(yōu)化,引入成熟的中文分詞算法IK;并將搜索用戶的校內(nèi)身份信息引入搜索結(jié)果的相關(guān)度計算中,提高用戶檢索結(jié)果的相關(guān)度和準確性。實驗表明,優(yōu)化后的搜索平臺與通用的搜索引擎和基于內(nèi)容管理的搜索引擎相比較,本文實現(xiàn)的搜索引擎能夠更快速、準確、全面地完成校內(nèi)用戶的搜索需求。

1 搜索引擎及Elasticsearch概述

1.1 搜索引擎概述

搜索引擎是用以在萬維網(wǎng)中搜索信息的軟件系統(tǒng)[2]。搜索引擎平臺主要包括爬蟲工具、索引工具、檢索器和用戶界面這四個主要部分組成。搜索引擎使用網(wǎng)絡(luò)爬蟲(Web Crawler)不斷地挖掘網(wǎng)域內(nèi)的網(wǎng)絡(luò)內(nèi)容,不斷地周而復(fù)始來窮盡探索網(wǎng)域內(nèi)的網(wǎng)頁。索引工具則針對爬蟲爬取的網(wǎng)頁內(nèi)容生成以詞為索引項的索引表,提高檢索器在數(shù)據(jù)庫中查找目標文檔的工作效率。全文搜索的索引會對網(wǎng)頁內(nèi)容中出現(xiàn)的每一個單詞建立索引列表[3]。檢索器會接收用戶提交的搜索關(guān)鍵詞,在數(shù)據(jù)庫中通過關(guān)鍵詞索引匹配來快速獲取關(guān)聯(lián)結(jié)果,并在用戶界面上按照預(yù)設(shè)的相關(guān)性排序來向用戶呈現(xiàn)搜索結(jié)果。

1.2 Elasticsearch概述

Elasticsearch 是一個基于Apache Lucene 開發(fā)而來的實時的分布式搜索和數(shù)據(jù)分析引擎[4]。ES 能夠快速、全面地瀏覽大規(guī)模數(shù)據(jù)集,適用于全文檢索,結(jié)構(gòu)化數(shù)據(jù)檢索和數(shù)據(jù)分析;ES 強大的數(shù)據(jù)檢索能力和優(yōu)秀的二次開發(fā)能力,使得很多商業(yè)軟件和平臺如百度、GitHub、Wikipedia 等也采用ES 作為數(shù)據(jù)資源檢索的核心組件。通過文獻的系統(tǒng)綜述[5-8],我們總結(jié)ES 具有以下突出優(yōu)點:

(1)ES 支持分布式的實時文件存儲結(jié)構(gòu),任意一個爬取到的字段都可以建立索引,并且可以被搜索到。

(2)ES 有非常強大的可擴展性,分布式架構(gòu)可以擴展到上百臺服務(wù)器,能夠應(yīng)對PB 級結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。

(3)ES 提供了RESTful API,使用JSON 格式,提供了非常優(yōu)秀的外部交互能力,使得搜索引擎能夠支持多種文件類型的搜索。ES 項目提供了多種語言版本的客戶端,包括Java、Python、.NET 和Groovy,提供了友好的二次開發(fā)平臺。

(4)ES 面向文檔,能夠存儲完整的數(shù)據(jù)對象或文檔,同時能夠?qū)γ恳粋€數(shù)據(jù)對象的內(nèi)容做索引。

(5)具備良好的數(shù)據(jù)備份和恢復(fù)功能,在發(fā)現(xiàn)有數(shù)據(jù)節(jié)點退出時,ES 能夠根據(jù)服務(wù)器的負載對索引分片進行重新分配,丟失的數(shù)據(jù)節(jié)點在重新啟動后,也會自動恢復(fù)連接。有較強的魯棒性。

綜合以上的特點,ES 可以有效地提升搜索效率,具有優(yōu)秀的擴展能力以及數(shù)據(jù)操縱能力。因此,本文基于ES 進行校內(nèi)全文搜索引擎的開發(fā)。

2 平臺設(shè)計與實現(xiàn)

針對高校服務(wù)器的分布特點,本文設(shè)計的基于Elasticsearch 的校內(nèi)全文搜索引擎的總體架構(gòu)如圖1所示,其核心組件包括爬蟲模塊、索引模塊以及檢索模塊。

圖1 校內(nèi)全文搜索引擎總體架構(gòu)設(shè)計

2.1 爬蟲模塊

本文設(shè)計并實現(xiàn)的爬蟲模塊架構(gòu)如圖2 所示。

圖2 爬蟲模塊架構(gòu)設(shè)計

初始化的URLs 列表為校園網(wǎng)的首頁以及各二級行政單位和二級學(xué)院首頁,并提交給多線程工作分配單元,將列表內(nèi)的URLs 平均的分配給n 只爬蟲。每個爬蟲單元在接收到各自的URLs 列表后,向目標URL發(fā)送HTTP 請求,接收返回的網(wǎng)頁內(nèi)容數(shù)據(jù)并進行解析。一方面,將文本內(nèi)容按照預(yù)設(shè)的文檔標準進行結(jié)構(gòu)化整理并保存在本地ES 數(shù)據(jù)庫中。另一方面,提取網(wǎng)頁內(nèi)容中包含的URL 鏈接作為新增URLs。這些新增的URLs 將通過預(yù)先設(shè)定的URL 篩選規(guī)則,將重復(fù)的、無效的以及校園網(wǎng)域外的URL 剔除,將剩余的URLs 提交給多線程工作分配單元來進行下一輪的數(shù)據(jù)抓取工作。

本文基于開源的Java 爬蟲框架WebCollector 定制開發(fā)了并行爬蟲模塊。通過8 條爬蟲線程連續(xù)30 天不間斷爬取,共累計獲取超過四百萬份校園網(wǎng)域內(nèi)的文檔。這些文檔內(nèi)容都按照預(yù)設(shè)的JSON 標準文檔結(jié)構(gòu)預(yù)處理后存儲在ES 的非關(guān)系型數(shù)據(jù)庫內(nèi),等待索引模塊處理。

本文預(yù)設(shè)的JSON 文檔結(jié)構(gòu):

2.2 索引模塊

ES 引擎的索引機制基于倒排索引(Inverted Index)技術(shù)開發(fā),文檔的關(guān)鍵詞來組成文檔集合。在用戶搜索時,首先將搜索詞與關(guān)鍵詞文檔集進行匹配,再根據(jù)各文檔在該關(guān)鍵詞集的權(quán)重量來對搜索結(jié)果排序。但是,由于ES 搜索核心的分詞表默認為英語,對中文文檔的分詞和歸類能力比較薄弱;同時,在文檔的權(quán)重計算上,也沒有考慮到域內(nèi)用戶的檢索偏好,在搜索結(jié)果的相關(guān)度上與用戶實際要搜索的內(nèi)容匹配度不高。針對以上兩個ES 系統(tǒng)的缺陷,本文針對性地對分詞技術(shù)和文檔權(quán)重計算算法進行了優(yōu)化,進一步提升校內(nèi)用戶的搜索體驗。

(1)中文分詞

本文引入的中文分詞技術(shù)基于IKAnalyzer 中文分詞語言包開發(fā)而來,其本質(zhì)是一個開源的,基于詞典分詞和文法分析算法的中文分詞組件。同時,根據(jù)對校內(nèi)搜索用戶的了解,其特點是周期性的搜索關(guān)鍵詞重復(fù)率較高[11]。相比廣域的搜索引擎,校園網(wǎng)絡(luò)范圍內(nèi)的用戶的搜索關(guān)鍵詞統(tǒng)計結(jié)果分布的離散度相對較低。將這些高頻詞匯引入分詞詞典,對中文分詞的表現(xiàn)和結(jié)果集的分類表現(xiàn)都有較大提升。針對這一特點,我們重新設(shè)計了ES 的索引模塊,如圖3 所示,將用戶檢索的高頻關(guān)鍵詞按用戶身份分類收集在擴展詞庫內(nèi),并對爬蟲爬取的校內(nèi)文檔進行實時分詞索引。最終生成的索引結(jié)果能夠更加匹配校內(nèi)用戶檢索的關(guān)鍵詞,也能進一步提升搜索結(jié)果的相關(guān)度。

(2)權(quán)重計算

一個文檔在索引內(nèi)的排序由文檔的相關(guān)性權(quán)重決定。一個文檔的權(quán)重計算由關(guān)鍵詞在該文檔中出現(xiàn)的位置和出現(xiàn)次數(shù)計算得來(出現(xiàn)的次數(shù)越多,出現(xiàn)該詞的文檔數(shù)量越少,則權(quán)重越大)?;贓S 存儲文檔的JSON 特性,以及校內(nèi)檢索用戶的身份識別特性,我們可以根據(jù)關(guān)鍵詞在不同位置(標題、作者、機構(gòu)、內(nèi)容等)分別出現(xiàn)的次數(shù)來綜合計算關(guān)鍵詞的權(quán)重,使搜索結(jié)果能夠進一步的匹配用戶的期望。

根據(jù)魯松等人[12]基于空間向量模型的文檔詞語權(quán)重計算方法,本文的權(quán)重計算公式如下:

wt,d表示詞t 在文檔d 中的權(quán)重;tft,T,tft,H,tft,C分別表示詞t 在文檔中標題、段落標題和內(nèi)容中分別出現(xiàn)的次數(shù);n 表示文檔的總數(shù);dft表示出現(xiàn)詞t 的文檔總數(shù);而a,b,c 分別代表標題、段落標題和內(nèi)容中的關(guān)鍵詞的權(quán)重系數(shù),約束條件為:a+b+c=1且a>b>c>0。

2.3 檢索模塊

檢索模塊是面向檢索用戶的Web,接收并解析用戶鍵入的搜索關(guān)鍵詞,在后臺匹配索引并反饋滿足搜索條件的結(jié)果。

圖3 基于IKAnalyzer的優(yōu)化索引模塊設(shè)計

用戶界面的設(shè)計參照了目前世界主流的搜索引擎,谷歌搜索和百度搜索的界面設(shè)計,來降低用戶的使用學(xué)習成本,如圖4 所示。頁面通過輸入框來接收用戶鍵入的搜索文本,并提交給查詢解析器。最終查詢的結(jié)果按照預(yù)先設(shè)定的相關(guān)性排序進行列表呈現(xiàn),如圖5 所示。

圖4 校內(nèi)搜索引擎首頁面

最后,為了優(yōu)化引擎的用戶體驗,我們對部分搜索關(guān)鍵詞生成檢索結(jié)果進行排序優(yōu)化,提高校園網(wǎng)域內(nèi)的各主要站點和熱門站點的排序名次。

圖5 搜索結(jié)果頁面

3 實驗結(jié)果分析

為了驗證基于ES 的校內(nèi)全文搜索引擎的搜索性能,分別選用了國內(nèi)通用搜索引擎百度和校內(nèi)CMS 集成搜索引擎(CMS)來進行對比測試。測試的指標為前50 個搜索結(jié)果的相關(guān)度和搜索結(jié)果的反饋時間,測試的關(guān)鍵詞為“學(xué)校名稱+圖書館”。對比結(jié)果如表1所示。

表1 搜索性能對比

測試結(jié)果顯示,基于ES 的校內(nèi)全文搜索引擎在搜索用時和搜索結(jié)果的準確率上要優(yōu)于百度和校內(nèi)CMS集成搜索引擎,有效的提升了校內(nèi)文檔檢索的效率和準確性。

4 結(jié)語

基于ES 的校內(nèi)全文搜索引擎平臺在校園網(wǎng)域內(nèi)運行穩(wěn)定,成功解決了校內(nèi)數(shù)字資源無法精準和快速的定位的問題,同時也滿足了校內(nèi)用戶的搜索需求。本文的下一步工作是在搜索引擎的基礎(chǔ)上,增加用戶搜索熱詞的功能,全校園網(wǎng)域特定時間段內(nèi)對特定數(shù)據(jù)的需求量,并動態(tài)更新檢索結(jié)果的相關(guān)度權(quán)重排序,進一步提升校內(nèi)用戶的搜索體驗。

猜你喜歡
爬蟲分詞搜索引擎
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
結(jié)巴分詞在詞云中的應(yīng)用
智富時代(2019年6期)2019-07-24 10:33:16
利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
電子測試(2018年1期)2018-04-18 11:53:04
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
電子制作(2017年9期)2017-04-17 03:00:46
值得重視的分詞的特殊用法
網(wǎng)絡(luò)搜索引擎亟待規(guī)范
基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)
廣告主與搜索引擎的雙向博弈分析
高考分詞作狀語考點歸納與疑難解析
横峰县| 和林格尔县| 山阴县| 民权县| 沙坪坝区| 林周县| 淮滨县| 沧州市| 百色市| 四平市| 绥江县| 缙云县| 鲁甸县| 永宁县| 张家港市| 常宁市| 凌源市| 丹巴县| 平罗县| 岢岚县| 军事| 乌恰县| 大同县| 吉木乃县| 双柏县| 平果县| 洱源县| 宜宾县| 卫辉市| 涞水县| 尼勒克县| 策勒县| 昆山市| 汉源县| 黄浦区| 黄龙县| 星子县| 贵港市| 万州区| 武山县| 清水河县|