- 自己動手寫分布式搜索引擎
- 羅剛
- 597字
- 2020-11-28 15:52:51
3.3.16 查詢大容量索引
一般情況下,索引達到100GB以上,搜索的響應時間可能會增加到秒級。可以使用并發(fā)多索引查詢來改進性能。
/** * 并發(fā)多索引查詢 * @param index索引目錄 * @param q查詢詞 * @return查詢結(jié)果 */ public static Hits Multisearch(String[] index, String q) { int length = index.length; IndexSearcher[] is = new IndexSearcher[length]; for ( int i = 0 ; i < length ; i ++){ is[i] = new IndexSearcher(index[i]); } Searcher searcher = new ParallelMultiSearcher(is); Query query = QueryParser.parse(q, "temp", new StandardAnalyzer()); Hits hits = searcher.search(query); return hits; }
ParallelMultiSearcher()把查詢?nèi)蝿瘴薪o多個IndexSearcher執(zhí)行,也就是Searcher類把任務交給多個同類執(zhí)行。
分布式計算參考http://www.spark-project.org。RDD是一個由分布在各個計算節(jié)點上的數(shù)據(jù)組成的不可變的數(shù)據(jù)集合,簡單來說就是一個數(shù)據(jù)集。(參考https://github.com/zouzias/spark-lucenerdd)
固態(tài)硬盤讀寫速度比機械硬盤快,能夠提高查找大容量索引的速度。機械硬盤在RAID 0陣列環(huán)境下使用也可以提高讀寫性能。通過玻璃中晶體和非晶體之間的相變來實現(xiàn)0和1之間的存儲轉(zhuǎn)變。
需要限制每個索引段最多只能存儲21億個獨立的單詞。超過此限制將會產(chǎn)生ArrayIndexOutOfBounds異常。
有些老師往往選學習成績好的同學回答問題。把學習成績好的同學調(diào)到前排,這樣能更加方便地提問。分層索引就是為優(yōu)質(zhì)的文檔開小灶,放在一個小索引中,其他的都放在大索引。
早期結(jié)束策略:如果完全執(zhí)行查詢耗時太長,則可以結(jié)束查詢并估計結(jié)果。結(jié)束條件可以根據(jù)文檔的數(shù)量或者增加時間來限制。為了讓搜索結(jié)果的質(zhì)量不會下降太多,可以對索引排序,把質(zhì)量好的文檔放在前面。
可以把Lucene的索引存到HBase。首先使用內(nèi)存緩存,然后再同步緩存到HBase后端。在Hbase中創(chuàng)建兩個表用來存儲索引:Index表存儲倒排索引,而Document表存儲正排索引。HBase中存儲數(shù)據(jù)的格式為Avro。
- Active Directory Disaster Recovery
- VR、AR與MR項目開發(fā)實戰(zhàn)
- vtiger CRM Beginner's Guide
- Joomla! 1.5 SEO
- Creo 6.0快速入門、進階與精通(升級版)
- Excel 2010 商務數(shù)據(jù)分析與處理(第2版)
- DSP開發(fā)寶典
- NHibernate 3.0 Cookbook
- Photoshop CS6從入門到精通
- 零基礎學會聲會影2018(全視頻教學版)
- Mastering Zabbix
- 剪映專業(yè)版:短視頻創(chuàng)作案例教程(全彩慕課版)
- 寫給大家看的PPT設計書(第2版)
- 平面設計師實戰(zhàn)教程
- Photoshop圖像處理立體化教程:Photoshop 2021(微課版·第2版)