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