官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 营山县| 河池市| 东丽区| 土默特右旗| 白河县| 宁蒗| 延川县| 丰都县| 威海市| 盐山县| 冀州市| 汶上县| 望谟县| 肇源县| 休宁县| 兖州市| 武胜县| 玉树县| 搜索| 洪泽县| 南溪县| 三明市| 姜堰市| 鄂伦春自治旗| 司法| 荣成市| 兴义市| 清流县| 琼中| 五华县| 突泉县| 华阴市| 安达市| 双峰县| 和顺县| 宜章县| 屯门区| 旅游| 山东省| 都匀市| 凤山县|