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

?

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

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

文/曾彪

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

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

安裝配置四步曲

Solr是一款非常優(yōu)秀的全文搜索引擎組件,對(duì)千萬(wàn)級(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)境)。

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

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

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

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

2.IKAnalyzer是一個(gè)開(kāi)源的分詞項(xiàng)目,它是基于Java 語(yǔ)言開(kāi)發(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ī)則過(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ù)和檢索字段后,可以通過(guò)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在建立索引的過(guò)程中對(duì)文獻(xiàn)的評(píng)分不能有效地控制,我們選擇了在L u c e n e的基礎(chǔ)上開(kāi)發(fā)索引程序,從而生成索引以供S o l r使用。

調(diào)用Solr搜索

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

搜索語(yǔ)法

Solr查詢(xún)的格式如下:

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中查詢(xún)關(guān)鍵詞為java的記錄,返回前面10條記錄,并且按照type和year進(jìn)行查詢(xún)結(jié)果的分組。

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

q:查詢(xún)字符串;

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

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

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

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

fq(filter query): 過(guò)濾查詢(xún);

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

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

version:查詢(xún)語(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用來(lái)確定需要分組的字段,facet.limit用來(lái)確定返回前分組數(shù)據(jù)的條數(shù)。

排序

學(xué)術(shù)搜索除了有海量的數(shù)據(jù)和高效的搜索引擎外,優(yōu)秀的排序算法也非常重要,在互聯(lián)網(wǎng)搜索引擎中,人們大多采用Pagerank來(lái)排序。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):在索引過(guò)程中設(shè)置的字段參數(shù);

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

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

queryNorm(q) :在給出每個(gè)查詢(xún)條目的方差和后,計(jì)算某查詢(xún)的標(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í)間、類(lèi)型、引用次數(shù)、是否核心期刊、是否基金項(xiàng)目等因素,通過(guò)d o c.S e t B o o s t(f)來(lái)給記錄評(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.分析檢索詞的詞性及分類(lèi)屬性,對(duì)應(yīng)的分類(lèi)文獻(xiàn)給予較高的權(quán)重。

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

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

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

多級(jí)緩存策略

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

Solr中有如下幾種類(lèi)型的緩存:

1.SolrCache緩存

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

2.過(guò)濾器緩存(filterCache)

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

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

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

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

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

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

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

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

分布式搜索與索引

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

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

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

監(jiān)控性能

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

1.分析統(tǒng)計(jì)數(shù)據(jù):Analyzer、TokenFilter、TokenStream和Tokenizer相關(guān)數(shù)據(jù),以及哪一個(gè)Analyzer被用來(lái)為特定域產(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ù):查詢(xún)操作、搜索器性能和處理時(shí)間、方法調(diào)用統(tǒng)計(jì)以及對(duì)大多常用執(zhí)行的查詢(xún)。

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

猜你喜歡
字段分詞文檔
淺談Matlab與Word文檔的應(yīng)用接口
有人一聲不吭向你扔了個(gè)文檔
分詞在英語(yǔ)教學(xué)中的妙用
淺談臺(tái)灣原版中文圖書(shū)的編目經(jīng)驗(yàn)
結(jié)巴分詞在詞云中的應(yīng)用
結(jié)巴分詞在詞云中的應(yīng)用
Word文檔 高效分合有高招
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
CNMARC304字段和314字段責(zé)任附注方式解析
無(wú)正題名文獻(xiàn)著錄方法評(píng)述