2015-11-21 110 views
2

在Solr中,當我將該字段設置爲'索引'而不是'存儲'時,它仍存儲在索引中。如果我反其道而行並將字段設置爲「存儲」但不是「索引」,如果我理解正確,它也會存儲在索引中。Solr的存儲和索引字段如何存儲在內部(在Lucene中)

我的問題是,在這些情況下,文檔如何在Lucene內部存儲?在Lucene中'儲存'字段的外觀如何,以及'索引'字段在Lucene內部的外觀如何。

這個問題的答案可能會幫助我理解爲什麼Solr中的原子更新只能處理存儲的字段和索引字段(如此處所述:https://wiki.apache.org/solr/Atomic_Updates#Stored_Values)。

回答

4

在Solr的/ Lucene的,索引存儲是兩個不同的概念。

索引表示字段值將被保存在倒排索引中,並且您可以在查詢時搜索它們。但是你無法在搜索結果文檔中看到它們。

存儲只是意味着它將被保存在存儲的字段值部分,而不是倒排索引,這意味着它不能被搜索,但可以用來顯示您何時獲得搜索結果文檔。

實際上,Solr的更新方式是取出整個文檔(只存儲字段),更改要更新的值並將其保存回來(使用重新索引)。這就是爲什麼它只能支持存儲的字段。

+1

爲了進一步擴展這一點,請考慮字段中值「value this value is value a value」。該索引將僅從內部docId的「this」,「is」,「a」和「value」引用。不可能從中重新創建原始值(這是一種簡單化,除了docId之外,還會有其他值附加到該標記,例如頻率(「termFreq」))。有關Lucene文檔,請參閱https://lucene.apache.org/core/5_3_1/core/org/apache/lucene/codecs/lucene53/package-summary.html#package_description) – MatsLindh

+0

謝謝智韜! :)你說'存儲只是意味着它將被保存在文檔值部分,而不是倒排索引'。你能否告訴我更多關於這個'文檔價值部分' - 也許你可以指出一些文件? –

+0

對不起,我混合了存儲的字段值和文檔值。他們是不同的。存儲字段值僅用於返回您的原始字段值,因爲有時原始值與索引值不同,例如在通過標記器之後。與Mats所說的一樣。文檔值是另一件事,也是文檔編號的關鍵,但用於分面或其他功能。請參閱https://cwiki.apache.org/confluence/display/solr/DocValues –

相關問題