ImproveSearchingSpeed精簡翻譯

1.不會動您就別瞎動,確實是我的問題您再動,不然越動越亂。

2.請及時更新至我的最新版本。(注:我不確定3.0.X版本之間索引是否兼容,應該是兼容的)

3.在本機磁盤建索引,別用網絡磁盤掛載,你要是非得網絡掛載也沒轍,最好用只讀(ReadOnly)方式掛載,還能稍微好點。(注:在本機磁盤建索引效率高,這點我們已經實踐過了)

4.固態硬盤尋道時間比傳統硬盤快100倍什麼什麼很好很無敵等等。(注:不用翻譯了,真買不起這玩意兒)

5.調整操作系統,在linux中交換分區設置過大可能會影響查詢效率,可以設置小一點。(注:最後沒辦法時,我們可能纔會考慮研究這個)

6.多線程共用一個IndexReader對象時,以只讀(ReadOnly)方式打開,效果會很明顯。(注:現在3.X版本打開IndexReader,默認就是ReadOnly的)

7.在非windows平臺上,使用NIOFSDirectory而不是FSDirectory,在windows平臺上NIO一直有BUG。

8.加內存條,加大JVM內存上限。

9.IndexSearcher單例化。(注:我們將IndexReader單例化,效果也很明顯)

10.首次查詢會有初始化緩存的過程,所以第一次查詢慢是正常的。(注:這跟性能調優好像沒什麼關係)

11.IndexSearcher進行reopen操作要消耗系統資源,不這麼幹你就沒法同步後來索引新增的數據,可以考慮預熱(Warming)技術在查詢之前先緩存起來。

12.索引建好後要優化(optimize),尤其是更新頻率低的索引一定要優化,但如果是更新頻率很高的話,優化操作會帶來負面開銷,只能通過減少mergeFactor參數來緩解。

13.減小mergeFactor參數的設置(注:這個設置多少我們認爲要看實際情況,實踐中發現值比較小,索引建立過程中也會出現很多意外的情況)

14.限制向量和字段的使用,只獲取你需要的數據而不要獲取全部,可以先將文檔編號(docID)排序再獲取。

15.當獲取文檔時,使用FieldSelector來選出要取哪些字段以及怎麼獲取。(注:目前沒用過這東西,現在的理解就是一個字段過濾器)

16.迭代所有的hits慢,有倆原因,首先是search()方法如果返回的hits超過了100個,它會再運行查詢,可以使用返回HitCollector的search方法代替(注:不太明白,哪兒有啊),然後是hits可能分散在磁盤裏,獲取要更費IO,除非索引很小以便可以直接擱內存裏,如果你不需要完整的文檔對象,而只需要一小部分字段,可以顯式用FieldCache類緩存起來。

17.當使用Fuzzy查詢時,使用最少的前綴長度。(注:我們不用這玩意兒)

18.研究研究filters,查詢時使用一個已緩存的bit集來限制結果集,比使用查詢子句更有效,尤其是在大索引中查詢大數目的文檔,過濾器經常用在查詢分類結果,很多時候也被查詢子句替代,不同之處在於Query影響文檔得分而Filter不會。

19.好好找出真正的瓶頸,複雜的查詢,重量級的結果集處理往往就是關鍵之處,用XXX工具仿真來輔助定位問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章