W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
DocValues 是一種在內(nèi)部記錄字段值的方法,與傳統(tǒng)的索引相比,對(duì)于某些用途(如排序和 faceting)更高效。
Solr 建立索引的標(biāo)準(zhǔn)方式是倒排索引。這種風(fēng)格生成了索引中所有文檔中的術(shù)語(yǔ)列表,每個(gè)術(shù)語(yǔ)旁邊是該術(shù)語(yǔ)出現(xiàn)的文檔列表(以及該文檔中出現(xiàn)的術(shù)語(yǔ)的次數(shù))。這使得搜索速度非常快 - 因?yàn)橛脩?hù)按照術(shù)語(yǔ)進(jìn)行搜索,具有 term-to-document 值的現(xiàn)成列表使查詢(xún)過(guò)程更快。
對(duì)于我們現(xiàn)在通常與搜索關(guān)聯(lián)的其他功能,如排序,faceting 和突出顯示,此方法效率不高。例如,faceting 引擎必須查看每個(gè)文檔中出現(xiàn)的每個(gè)術(shù)語(yǔ)、這些術(shù)語(yǔ)將組成結(jié)果集并提取文檔 ID 以生成 faceting 列表。在 Solr 中,這被保存在內(nèi)存中,并且可能加載緩慢(取決于文檔數(shù)量、術(shù)語(yǔ)等)。
在 Lucene 4.0 中,引入了一種新的方法。DocValue 字段現(xiàn)在是面向列的字段,document-to-value 映射在索引時(shí)生成。這種方法有望減輕 fieldCache 的一些內(nèi)存需求,并且可以更快地查找 faceting,排序和分組。
要使用 docValues,只需要為將要使用的字段啟用它。與所有架構(gòu)設(shè)計(jì)一樣,您需要定義一個(gè)字段類(lèi)型,然后使用 docValues 啟用該類(lèi)型的字段。所有這些行動(dòng)都是在 schema.xml 中完成。
為 docValues 啟用一個(gè)字段只需要添加 docValues="true" 到字段(或字段類(lèi)型)的定義,就像來(lái)自這個(gè)例子中 Solr 的 sample_techproducts_configs 配置集合 schema.xml 一樣:
<field name="manu_exact" type="string" indexed="false" stored="false" docValues="true" />
如果您已經(jīng)將索引數(shù)據(jù)編入了 Solr 索引中,則需要在更改 schema.xml 中的字段定義后為您的內(nèi)容重新編制索引,以便成功使用 docValues。
DocValues 只適用于特定的字段類(lèi)型。選擇的類(lèi)型決定了將使用的底層 Lucene docValue 類(lèi)型??捎玫?Solr 字段類(lèi)型為:
這些 Lucene 類(lèi)型與如何對(duì)值進(jìn)行排序和存儲(chǔ)相關(guān)。
還有一個(gè)額外的配置選項(xiàng)可用,即修改 docValuesFormat 字段類(lèi)型使用的選項(xiàng)。默認(rèn)實(shí)現(xiàn)是將一些東西加載到內(nèi)存中,并保留在磁盤(pán)上。但是,在某些情況下,您可以選擇指定一個(gè)替代的 DocValuesFormat 實(shí)現(xiàn)。例如,您可以選擇通過(guò)指定 docValuesFormat="Memory" 字段類(lèi)型來(lái)將所有內(nèi)容都保存在內(nèi)存中:
<fieldType name="string_in_mem_dv" class="solr.StrField" docValues="true" docValuesFormat="Memory" />
請(qǐng)注意,該 docValuesFormat 選項(xiàng)可能會(huì)在將來(lái)的版本中更改。
Lucene 索引向后兼容只支持默認(rèn)編解碼器。如果您選擇在 schema.xml 中自定義 docValuesFormat,則升級(jí)到未來(lái)版本的 Solr 可能要求您切換回默認(rèn)的編碼解碼器并優(yōu)化索引, 以便在升級(jí)之前將其重寫(xiě)為默認(rèn)編碼解碼器, 或重新構(gòu)建整個(gè)升級(jí)后從頭開(kāi)始索引。
如果 docValues="true",則在字段用于排序、faceting 或函數(shù)查詢(xún)時(shí), docValues 將自動(dòng)被使用。
在搜索查詢(xún)期間檢索的字段值通常從存儲(chǔ)的值中返回。但是,當(dāng)所有字段(或模式匹配 globs)被指定返回(例如“fl = *”)用于搜索查詢(xún)時(shí),non-stored docValues 字段也將與其他存儲(chǔ)字段一起返回,取決于每個(gè)字段 useDocValuesAsStored 參數(shù)的有效值。對(duì)于架構(gòu)版本> = 1.6,隱式默認(rèn)值為useDocValuesAsStored="true"。有關(guān)更多詳細(xì)信息,請(qǐng)參閱字段類(lèi)型定義和屬性和定義字段。
當(dāng) useDocValuesAsStored="false" 時(shí),non-stored DocValues 字段仍然可以通過(guò) fl 參數(shù)中的名字明確請(qǐng)求,但不會(huì)匹配 glob 模式("*")。請(qǐng)注意,在查詢(xún)時(shí)返回 DocValues 以及“常規(guī)”存儲(chǔ)字段具有性能影響,因?yàn)榇鎯?chǔ)的字段可能并不是因?yàn)?DocValue 是列式的,因此可能會(huì)為每個(gè)返回的文檔產(chǎn)生額外的成本檢索。另請(qǐng)注意,在從 DocValues 返回 non-stored 字段時(shí),多值字段的值將按排序順序(而不是插入順序)返回。如果您需要在原始插入順序中返回多值字段,請(qǐng)將您的多值字段存儲(chǔ)(如此更改需要重新編制索引)。
在查詢(xún)返回的情況下,只有 docValues 字段的性能可能會(huì)提高,因?yàn)榉祷氐拇鎯?chǔ)字段需要磁盤(pán)讀取和解壓縮,而返回 fl 列表中的 docValues 字段只需要訪問(wèn)內(nèi)存。
從 docValues 表單中檢索字段(使用 / export 處理程序、流式表達(dá)式或在 fl 參數(shù)中請(qǐng)求字段時(shí)),則必須理解常規(guī)存儲(chǔ)字段和 docValues 字段之間的兩個(gè)重要區(qū)別:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: