2015-03-02 81 views
3

在SOLR中,stored=trueindexed=true之間的區別是什麼。我知道stored=true存儲字段的實際值而不修改它,並且indexed=true存儲用於計算目的的字段的修改值。我想知道,直到它影響到表演的程度。與stored =falseindexed=true相比,stored=trueindexed=true的組合是否會降低持久性和檢索的性能?SOLR Indexed = true和stored = true之間的區別

回答

11

indexed = true是必要的,如果你想搜索「over」該字段。如果一個字段沒有編入索引,那麼您無法從該字段找到值/字詞。 如果indexed = true的分析器鏈運行在該字段的數據上。如果您需要從索引讀取字段的值/內容,則需要stored = true。例如,如果您喜歡使用突出顯示功能,或者如果您想將solr用作數據庫,而不僅僅將其用作搜索索引。如果stored = true表示:只需存儲原始內容並輸出原始內容(如果需要)。

我想知道,直到它影響性能的級別。

內容(存儲)和索引被放置在不同的文件中。所以solr不需要遍歷搜索的內容文件,只是因爲存儲是真實的。

需要一些時間來存儲數據,特別是如果它很大。在檢索方面,這取決於你放入'fl'的內容。如果您沒有使用'fl'檢索字段,則不需要花費閱讀它。

但是,如果該字段已存儲,則solr能夠在結果列表中打印內容(取決於您的solr配置)。這意味着,您的結果列表可能會更大(取決於您的內容/字段大小)。如果solr必須發送存儲字段的內容,那麼構建列表並將列表傳輸到客戶端可能會更慢。

執行搜索的時間將是相同的。但是,請求所需的整個時間是以下幾項內容的添加:搜索,構建結果列表,將列表傳輸到客戶端等。因此,將所有內容存儲到結果列表中可能會減慢solr請求,但不會影響查詢時間。

+0

你能否提出其他方法來提高性能?在我的情況下,持久性和檢索速度變慢,並且我們配置了1個分片和3個副本,該索引用於分頁目的(如排序,分組等)。我們正在考慮增加OpenSearchers的數量,但我們讀到這會在RAM上產生開銷。我們還在批量作業和實時操作中進行了大量的強化操作。我們考慮使用軟提交,但我們需要「完成實時」響應,而不是「近實時」響應。 – 2015-03-04 08:41:04

+0

閱讀此內容,它看起來像硬性提交是性能問題的原因。一種選擇是在使用'optimize = false'選項導入後提交數據。但每次更新都會使您的索引碎片化,因此您必須每隔一天/每天以特定間隔運行一次優化。你可以玩''選項。有一點是,主要是導入/提交導致新的搜索處理程序。在這種情況下(部分)緩存丟失=性能不佳。如果您可以從德語翻譯,請閱讀http://php-solr-lucene.blogspot.de/2012/09/relatime-suche-vs-performance.html – 2015-03-04 16:03:22

+0

優化實際上設置爲默認值,即「10」。如果我們增加碎片的數量呢?不會對錶演產生影響嗎? – 2015-03-05 06:27:13

相關問題