SolrCloud索引數量少於正確值,並設定自動提提交;Solr的幾種提交方式;
場景描述:
在建立SolrCloud的索引時,發現數據量變少了。多次測試發現,每次建立索引都會少一部分,在執行其他建立索引程式時,之前的索引量會達到正確索引量,但是後面的又會少一部分。問題出在MapReduce程式中,有一次提交沒有執行。
先了解下提交的幾種方式:
- 硬提交(hard commit): solrService.commit(true,true,true)
硬提交是提交資料持久化到磁盤裡面。
openSearcher=true:Solr/Lucene searchers 被重新開啟,所有的cache都失效(索引段級別的cache不會失效),autowarming會執行。這是老版本文件唯一能看到新增加的文件的方法。openSearcher=false:如果要搜尋新的文件,需要執行一次soft commit。
- 軟提交(Soft commit): solrService.commit()
軟提交是提交資料到記憶體裡面,並沒有持久化到磁碟。
它能使文件可見,但是會有一些代價。尤其是在solrconfig.xml裡定義的頂層的cache(filterCache、queryResultCache等)會失效,autowarning會在頂層cache發生(比如filterCache、queryResultCache)。這時候,newSearcher的查詢都會被執行,而且,fieldvaluecache也會失效。因此,facet查詢也不得不等cache重新生成。在頻繁的soft commit下,cache基本上沒什麼效果,在某些場景下,最好去掉它。然而,索引段級別的cache(比如fieldcache),用於function 查詢,排序等,是基於索引段的,不會因為soft commit而失效,它們能繼續被使用。
- 自動提交
設定soft commit時間間隔足夠長,比如5分鐘或更長(配置為-1則不自動soft commit)。soft commit是有關可見性的,大批量索引構建應該不是為了滿足實時搜尋的,所以沒必要額外地開啟任何型別的searcher。這裡設定的是5分鐘。專案中使用的是自動提交,則程式中不需要手動設定提交命令,伺服器會自動提交。
自動提交設定如下:
總結:
1.硬提交: 硬提交是提交資料持久化到磁盤裡面。 若想搜到結果openSearcher為true即可,openSearcher為false時,需要執行Soft commit 2.軟提交: 軟提交是提交資料到記憶體裡面,並沒有持久化到磁碟。 是比硬提交(openSearcher=true)使文件可見的更輕量級的操作 3.自動提交 則程式中不需要手動設定提交命令,伺服器會自動提交。