1. 程式人生 > >SolrCloud索引數量少於正確值,並設定自動提提交;Solr的幾種提交方式;

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而失效,它們能繼續被使用。

  • 自動提交
        設定hard commit時間間隔為15秒,openSearcher=false。只是為了把大量資料匯入solr,而不是為了實時搜尋。這樣設定,就是最壞的情況也只是當你重啟,只需要從tlog回放15秒的資料。

        設定soft commit時間間隔足夠長,比如5分鐘或更長(配置為-1則不自動soft commit)。soft commit是有關可見性的,大批量索引構建應該不是為了滿足實時搜尋的,所以沒必要額外地開啟任何型別的searcher。這裡設定的是5分鐘。專案中使用的是自動提交,則程式中不需要手動設定提交命令,伺服器會自動提交。

自動提交設定如下:


總結:

1.硬提交:
硬提交是提交資料持久化到磁盤裡面。
若想搜到結果openSearcher為true即可,openSearcher為false時,需要執行Soft commit

2.軟提交:
軟提交是提交資料到記憶體裡面,並沒有持久化到磁碟。
是比硬提交(openSearcher=true)使文件可見的更輕量級的操作

3.自動提交
則程式中不需要手動設定提交命令,伺服器會自動提交。