• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Solr學(xué)術(shù)索引應(yīng)用顯身手

      2010-01-29 02:33:18曾彪
      中國(guó)教育網(wǎng)絡(luò) 2010年10期
      關(guān)鍵詞:字段分詞文檔

      文/曾彪

      華中科技大學(xué)圖書館累積的各種元數(shù)據(jù)總量接近1億條。學(xué)校結(jié)合S o l r開發(fā)了學(xué)術(shù)搜索系統(tǒng),從而能夠充分利用這些元數(shù)據(jù)。

      華中科技大學(xué)圖書館在資源整合方面做了大量的元數(shù)據(jù)收集工作,累積的各種元數(shù)據(jù)總量接近1億條,為了充分利用這些元數(shù)據(jù),我們結(jié)合S o l r開發(fā)了學(xué)術(shù)搜索系統(tǒng)(當(dāng)前在http://www.libsou.com 上運(yùn)行)。

      安裝配置四步曲

      Solr是一款非常優(yōu)秀的全文搜索引擎組件,對(duì)千萬級(jí)別的數(shù)據(jù)搜索速度能達(dá)到毫秒級(jí)別,Solr在2010 年7 月發(fā)布了1.41版。

      Solr可以在Tomcat、Jetty、Resin等平臺(tái)下運(yùn)行,學(xué)術(shù)搜索的運(yùn)行環(huán)境為:Windows2008 R2 x64位、Solr 1.41版、Java 1.6 x64位、Tomcat 6.0.24 x64位(考慮到對(duì)32G內(nèi)存的充分利用,在配置環(huán)境時(shí)選擇了64位的運(yùn)行環(huán)境)。

      我們通過以下步驟配置S o l r的運(yùn)行環(huán)境:

      1.安裝配置Tomcat和Java運(yùn)行環(huán)境,并調(diào)整了Tomcat 的最大和最小的內(nèi)存值。-Xmx30524M -Xms25524M,在Tomcat 中配置solr.home,設(shè)置為Java 的系統(tǒng)參數(shù)-Dsolr.solr.home=d:solr。

      2.解壓縮Solr,將Solr發(fā)布包中的examplesolr目錄復(fù)制到其他目錄(d:solr),修改$SOLR_HOME/conf/solrconfig.xml,找到dataDir設(shè)置:修改為索引存放的目錄,默認(rèn)為,修改為:

      r.data.dir:./solr}修改為:

      。

      3.將apache-solr-1.4.1.war部署到Tomca t 之下,并且可以將這個(gè)w a r 復(fù)制到tomcatwebapps的目錄下。

      4.修改Tomcat的server.xml文件(防止出現(xiàn)亂碼),設(shè)置URIEncoding為UTF-8:

      redirectPort="8443" URIEncoding="UTF-8" />

      增加tomcatconfCatalinalocalhostsolr.xml文件,其內(nèi)容為:

      Solr 主要是通過schema. xml 和solrConfig.xml 這兩個(gè)XML 文件來完成配置,solrconfig.xml文件包含了大部分的參數(shù),用來配置Solr的緩存、索引路徑、查詢參數(shù)、查詢相關(guān)的事件監(jiān)聽器、更新處理等,與Solr運(yùn)行相關(guān)的參數(shù)都可以通過這個(gè)文件來配置。schema.xml相當(dāng)于數(shù)據(jù)表配置文件,它定義了加入索引的數(shù)據(jù)的數(shù)據(jù)類型,主要包括types、fields和其他的一些缺省設(shè)置。該文件中配置的字段與索引字段的名稱與屬性一致,例:

      中文分詞提高搜索準(zhǔn)確性

      在中文搜索中,中文分詞的加入可以提高搜索的準(zhǔn)確性。中文不同于西文,詞匯之間沒有明顯的分界,但是計(jì)算機(jī)自然語(yǔ)言處理是按詞匯來進(jìn)行分析的,因此中文分詞的效果好壞直接影響中文檢索和自然語(yǔ)言處理的準(zhǔn)確性。當(dāng)前開源的分詞組件有:

      1.ICTCLAS3.0分詞速度單機(jī)是996KB/s,分詞精度為98.45%,API 不超過200KB,各種詞典數(shù)據(jù)壓縮后不到3M。ICTCLAS 全部采用C/C++編寫,支持Linux、FreeBSD及Windows系列操作系統(tǒng),支持C/C++、C#、Delphi、Java等主流的開發(fā)語(yǔ)言。

      2.IKAnalyzer是一個(gè)開源的分詞項(xiàng)目,它是基于Java 語(yǔ)言開發(fā)的輕量級(jí)的中文分詞工具包。結(jié)合詞典分詞和文法分析算法的中文分詞組件。最新版本IKAnalyzer3.2.3 ,獨(dú)立于Lucene 項(xiàng)目,同時(shí)提供了對(duì)Lucene、Solr的默認(rèn)優(yōu)化實(shí)現(xiàn)。。

      3.Paoding提供Lucene和Solr 接口,具有極高的效率和高擴(kuò)展性, 引入隱喻,采用完全的面向?qū)ο蟮脑O(shè)計(jì)。

      4.MMSeg 提供Lucene 和Solr 接口,MMSeg 算法實(shí)現(xiàn)中文分詞器,并實(shí)現(xiàn)Lucene的 analyzer和Solr的TokenizerFactory。中文分詞器可以在在Lucene 和Solr 中使用。MMSeg 算法有兩種分詞方法:Simple 和Complex,它們都是基于正向最大匹配。Complex 增加了4 個(gè)規(guī)則過濾。

      5.imdict-chinese-analyzer:算法基于隱馬爾科夫模型(Hidden Markov Model,H M M ) ,是中國(guó)科學(xué)院計(jì)算技術(shù)研究所的ictclas 中文分詞程序的重新實(shí)現(xiàn)(基于Java),可以直接為L(zhǎng)ucene搜索引擎提供簡(jiǎn)體中文分詞支持。

      Solr在建立索引進(jìn)行搜索時(shí)都用到了中文分詞組件,我們選擇IKAna lyzer作為學(xué)術(shù)搜索的分詞工具。

      在設(shè)計(jì)好數(shù)據(jù)庫(kù)和檢索字段后,可以通過S o l r提供的導(dǎo)入功能,將我們需要進(jìn)行搜索的數(shù)據(jù)導(dǎo)入到S o l r中,S o l r會(huì)生成索引文件。這種方式雖然方便,但是不靈活。在學(xué)術(shù)搜索的排序中,要將最相關(guān)的、最值得閱讀的、最新的、引用頻次高的學(xué)術(shù)文獻(xiàn)排到最前面,而S o l r在建立索引的過程中對(duì)文獻(xiàn)的評(píng)分不能有效地控制,我們選擇了在L u c e n e的基礎(chǔ)上開發(fā)索引程序,從而生成索引以供S o l r使用。

      調(diào)用Solr搜索

      在完成上面的工作后,調(diào)用S o l r搜索就很容易了,通過h t t p發(fā)送指定的搜索參數(shù),S o l r就能返回X M L或者j o s n的結(jié)果。

      搜索語(yǔ)法

      Solr查詢的格式如下:

      http://localhost:8983/solr/select/?facet.limit=10&rows=10&start=0&facet=true&q=content:java&mlt.count=15&mlt=true&mlt.fl=title&mlt.mintf=1&hl.fl=title,content&facet.field=type,year&mlt.mindf=1&hl=true

      以上參數(shù)表示:在content中查詢關(guān)鍵詞為java的記錄,返回前面10條記錄,并且按照type和year進(jìn)行查詢結(jié)果的分組。

      Solr 常用的查詢參數(shù)如下:

      q:查詢字符串;

      fl:指定返回哪些字段內(nèi)容,用逗號(hào)或空格分隔多個(gè)內(nèi)容;

      start:返回第一條記錄在完整找到結(jié)果中的偏移位置,從0開始,一般用于分頁(yè);

      rows:指定返回記錄條數(shù)的上限,配合start來實(shí)現(xiàn)分頁(yè);

      sort:對(duì)指定字段的排序,格式是year desc, year asc,默認(rèn)是相關(guān)性降序;

      fq(filter query): 過濾查詢;

      qt(query type): 指定某個(gè)類型,用來處理查詢請(qǐng)求,默認(rèn)是standard;

      indent:返回的結(jié)果是否縮進(jìn),默認(rèn)關(guān)閉,用indent=true|on 開啟,一般調(diào)用json,php,phps,ruby輸出才有必要用這個(gè)參數(shù);

      version:查詢語(yǔ)法的版本,建議不使用它,由服務(wù)器指定默認(rèn)值。

      分組

      按照指定的字段分組檢索是Solr的一項(xiàng)特性,目前有很多搜索引擎提供這項(xiàng)功能。在設(shè)計(jì)好分組字段后,建立索引時(shí)必須將需要分組的字段設(shè)置為Field.Index.NOT_ANALYZED。人們可以同時(shí)按照多個(gè)字段進(jìn)行分組。在提交給Solr的參數(shù)中,facet.field用來確定需要分組的字段,facet.limit用來確定返回前分組數(shù)據(jù)的條數(shù)。

      排序

      學(xué)術(shù)搜索除了有海量的數(shù)據(jù)和高效的搜索引擎外,優(yōu)秀的排序算法也非常重要,在互聯(lián)網(wǎng)搜索引擎中,人們大多采用Pagerank來排序。Lucene中組合使用了信息檢索的向量空間模型和布爾模型。下面是Lucene的評(píng)分公式:

      score(q,d) = coord·queNorm(q)…

      ∑(tf(t in d) ·idf(t)2t.getBoost() ·norm(t,d))

      t inq其中:

      tf(t in d):詞條t在文檔d中出現(xiàn)的詞頻;

      idf( t ):詞條t在文檔中的倒排詞頻;

      boost(t.field in d):在索引過程中設(shè)置的字段參數(shù);

      lengthNorm(t.field in d):字段的標(biāo)準(zhǔn)化值,表明在字段中存儲(chǔ)了多少詞條,這個(gè)數(shù)值是在索引過程中計(jì)算出來的,并且也存儲(chǔ)在索引中;

      coord(q, d):協(xié)調(diào)因子,它的計(jì)算是基于文檔d中所包含的所有可供查詢的詞條數(shù)量;

      queryNorm(q) :在給出每個(gè)查詢條目的方差和后,計(jì)算某查詢的標(biāo)準(zhǔn)化值。

      學(xué)術(shù)搜索在設(shè)計(jì)排序時(shí)結(jié)合了3個(gè)方面的內(nèi)容:

      1.L u c e n e本身的評(píng)分機(jī)制,學(xué)術(shù)搜索綜合時(shí)間、類型、引用次數(shù)、是否核心期刊、是否基金項(xiàng)目等因素,通過d o c.S e t B o o s t(f)來給記錄評(píng)分。

      2.在搜索時(shí),對(duì)標(biāo)題、關(guān)鍵詞、文摘分別給不同的權(quán)重t i t l e^2 k e y w o r d^ c o n t e n t。

      3.分析檢索詞的詞性及分類屬性,對(duì)應(yīng)的分類文獻(xiàn)給予較高的權(quán)重。

      改進(jìn)效率軟硬兼施

      我們有多種方式來提高Solr搜索效率與并發(fā)數(shù),比如用更快的C P U、采取S S D硬盤或者S A S 1 5 K r a i d 0 的方式能大幅提高硬盤的讀取效率、使用大內(nèi)存虛擬硬盤來存放索引文件。

      我們除了從硬件方面改善Solr性能之外,還可以采用其他方式來改善其性能。

      多級(jí)緩存策略

      在建立索引完成之后,我們很難對(duì)索引結(jié)構(gòu)作出較大改動(dòng),而緩存能大幅度提高搜索服務(wù)的性能,所以我們可以采用多級(jí)緩存的策略來提高Solr的并發(fā)性能和搜索性能。

      Solr中有如下幾種類型的緩存:

      1.SolrCache緩存

      Solr提供了兩種SolrCache接口實(shí)現(xiàn)類:solr.search.LRUCache(LRU = 最近最少使用內(nèi)存中)和solr.search.FastLRUCache(FastLRUCache在1.4版本中引入的),后者速度在普遍意義上要比LRUCache更快。LRUCache和FastLRUCache都使用了現(xiàn)成的Map來維護(hù)數(shù)據(jù),不同點(diǎn)是如何來淘汰數(shù)據(jù)。

      2.過濾器緩存(filterCache)

      filterCache存儲(chǔ)了無序的文檔編號(hào)列表(lucene document id集合)。filterCache主要用在查詢過濾、查詢結(jié)果分組、進(jìn)行排序,在查詢參數(shù)使用fq、facet的應(yīng)用中,對(duì)filterCache的調(diào)優(yōu)使得性能的改善效果明顯。通過監(jiān)控搜索服務(wù)器的緩存命中率來調(diào)整參數(shù),從而獲取更好的效果。

      3.查詢結(jié)果緩存(queryResultCache)

      queryResultCache是對(duì)查詢結(jié)果的緩存(SolrIndexSearcher中的Cache緩存的都是document id set),這里的結(jié)果就是完全有序的結(jié)果。

      4.對(duì)象緩存(documentCache)

      在Lucene中,Documen是一個(gè)需要進(jìn)行索引的“單元”,一個(gè)Document由多個(gè)字段組成,類似數(shù)據(jù)庫(kù)中的一條記錄。documentCache用來保存,要注意document中存儲(chǔ)的字段的多少,避免大量的內(nèi)存消耗。

      5.自定義緩存(User/Generic Caches)

      Solr支持自定義Cache,只需要實(shí)現(xiàn)自定義的regenerator即可,下面是配置示例:

      warmCount="4096"regenerator="myrRege nerator"/>-也可以使用memcached來替代Solr提供的緩存方式,這樣能獲得分布式緩存支持。

      分布式搜索與索引

      當(dāng)索引越來越大,單臺(tái)服務(wù)器無法滿足搜索需求時(shí),可以采取分布式搜索與索引來提高搜索效率:將原來大的索引文件,分隔為多個(gè)小索引文件,分發(fā)到多臺(tái)S o l r搜索服務(wù)器上面,客戶端通過一次搜索多臺(tái)服務(wù)器,S o l r將從多臺(tái)服務(wù)器返回的結(jié)果合并,然后返回給客戶端。分布式搜索可以大幅度提高S o l r的并發(fā)處理能力。

      需要注意的是要增大容器http處理線程數(shù)來防止阻塞,分布式搜索會(huì)加大http的請(qǐng)求數(shù)目,如果http容器沒有多余的線程處理請(qǐng)求,servlet容器就會(huì)阻塞剛來的請(qǐng)求,這種情況一直持續(xù)到正在處理的請(qǐng)求被處理完畢。

      與分布式搜索相同,當(dāng)需要索引的數(shù)據(jù)量非常大或者對(duì)數(shù)據(jù)的實(shí)時(shí)性要求比較高時(shí),可以通過分布式索引來提供索引速度。在實(shí)施分布式索引中,索引的文檔必須有一個(gè)唯一鍵,至于如何建立小索引,這點(diǎn)隨用戶的喜好而定。關(guān)于如何決定哪條記錄放在哪個(gè)索引上,我們可以使用類似這樣的公式:uniqueId.hashCode() % numServers。

      監(jiān)控性能

      LucidGaze for Solr 是由 Lucid 開發(fā)的開源 Solr 監(jiān)測(cè)工具,該工具提供了快照、存儲(chǔ)、交互視圖、比較各種Solr 性能指標(biāo)等功能,用5個(gè)不同的監(jiān)視器來搜集統(tǒng)計(jì)數(shù)據(jù),具體如下:

      1.分析統(tǒng)計(jì)數(shù)據(jù):Analyzer、TokenFilter、TokenStream和Tokenizer相關(guān)數(shù)據(jù),以及哪一個(gè)Analyzer被用來為特定域產(chǎn)生TokenStream。

      2.文檔統(tǒng)計(jì)數(shù)據(jù):已建索引文檔的總數(shù),索引的各個(gè)域。

      3.索引統(tǒng)計(jì)數(shù)據(jù): IndexReader和IndexWriter的活動(dòng)和行為,比如查看每個(gè)實(shí)例、跟蹤每個(gè)相關(guān)方法的調(diào)用、查看緩存及內(nèi)存使用情況和索引增加和提交的平均時(shí)間。

      4.搜索統(tǒng)計(jì)數(shù)據(jù):查詢操作、搜索器性能和處理時(shí)間、方法調(diào)用統(tǒng)計(jì)以及對(duì)大多常用執(zhí)行的查詢。

      5.存儲(chǔ)統(tǒng)計(jì)數(shù)據(jù): Lucene存儲(chǔ)架構(gòu)的目錄實(shí)例(directory instance)。

      猜你喜歡
      字段分詞文檔
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      有人一聲不吭向你扔了個(gè)文檔
      結(jié)巴分詞在詞云中的應(yīng)用
      基于RI碼計(jì)算的Word復(fù)制文檔鑒別
      值得重視的分詞的特殊用法
      Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
      CNMARC304字段和314字段責(zé)任附注方式解析
      無正題名文獻(xiàn)著錄方法評(píng)述
      關(guān)于CNMARC的3--字段改革的必要性與可行性研究
      高考分詞作狀語(yǔ)考點(diǎn)歸納與疑難解析
      七台河市| 牡丹江市| 万山特区| 化德县| 忻城县| 璧山县| 东丰县| 青岛市| 禹州市| 宝兴县| 喀什市| 田林县| 屏边| 务川| 曲松县| 于都县| 宁蒗| 天全县| 汉寿县| 巍山| 阜城县| 杭锦后旗| 舟山市| 若尔盖县| 客服| 哈密市| 苗栗市| 水富县| 北辰区| 土默特右旗| 马公市| 寿阳县| 弥勒县| 砀山县| 荔波县| 霍邱县| 革吉县| 邢台县| 姜堰市| 布尔津县| 信宜市|