今天在研究公司搜尋這一塊**的時候,看到了solrserve呼叫optimize(),研究下這個optimize()的作用,**如下:
long st = system.currenttimemillis();
solrserver server = solrserve***ctory.get(constants.master);
// 禁止solr資料同步
solrutils.lockmasterreplication(server);
logger.info("刪除現有索引!");
// 刪除舊索引
solrutils.deleteall(server);
logger.info("開始重建全部商品索引");
// 建立新索引
buildindex(server);
server.commit();
server.optimize();
long et = system.currenttimemillis();
在提交server.commit()之後,server.optimize()
api上是這樣說的:performs an explicit optimize, causing a merge of all segments to one
翻譯過來就是:執行乙個優化,把片段合併為乙個。
再後來查資料知道:optimize其實是個很重量級的操作,執行optimize操作後solr會進行索引資料的合併來優化查詢效能
也就是說solrserver.optimize()可以優化查詢效能,但如果索引資料特別大的時候,呼叫optimize()則會花費更多的時間,因為你在提交之後每次都進行optimize操作,提交會越來越慢,甚至solr不再響應你的提交請求,另外,如果你的服務是主從模式,那麼對master的optimize還會導致整個索引塊同步到replica上,影響就可想而知了
如果一定要用optimize的話,可以在solr服務不忙的時候,寫乙個定時任務來完成,也可以用solr自帶的控制台手動執行optimize動作
MySQL中optimize的作用
mysql執行命令delete語句時,如果包括where條件,並不會真正的把資料從表中刪除,而是將資料轉換成了碎片,通過下面的命令可以檢視表中的碎片數量和索引等資訊 查詢結果中 index length 代表索引的數量 data free 代表碎片數量 然後執行下面命令進行優化整理 mysql op...
springcloud的 作原理
springcloud的 作原理 springcloud由以下 個核 元件構成 eureka 各個服務啟動時,eureka client都會將服務註冊到eureka server,並且eureka client還可以反過來從eureka server拉 取登錄檔,從 知道其他服務在哪 ribbon ...
solr的join的用法
join的真正用法舉例 a core是電影表,欄位是電影id,導演id b core是導演表,裡面包括導演id,導演名字,欄位是 現在搜一下叫 張三 的導演的所有電影 則需要在a core裡進行搜尋 name 張三 但現在有些問題,solr主要作用是搜尋,而不是關係型資料庫,所以返回值裡依然只有a ...