99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

如何使用DocValues

2018-11-13 15:34 更新

DocValues 是一種在內(nèi)部記錄字段值的方法,與傳統(tǒng)的索引相比,對于某些用途(如排序和 faceting)更高效。

為什么使用 DocValues?

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

要使用 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 字段類型為:

  • StrField 和 UUIDField:如果該字段是單值(即多值為 false),則 Lucene 將使用該 SORTED 類型。如果該字段是多值的,Lucene 將使用該 SORTED_SET 類型。
  • BoolField:如果該字段是單值(即多值為 false),則 Lucene 將使用該 SORTED 類型。如果該字段是多值的,Lucene 將使用該 SORTED_BINARY 類型。
  • 任何 *PointField 數(shù)字或日期字段、EnumFieldType 和 CurrencyFieldType:如果該字段是單值(即多值為 false),則 Lucene 將使用該 NUMERIC 類型。如果該字段是多值的,Lucene 將使用該 SORTED_NUMERIC 類型。
  • 任何不建議使用的 Trie* 數(shù)字或日期字段、EnumField 以及 CurrencyField:如果該字段是單值(即多值為 false),則 Lucene 將使用該 NUMERIC 類型。如果該字段是多值的,Lucene 將使用該 SORTED_SET 類型。

這些 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

排序,F(xiàn)aceting 和功能

如果 docValues="true",則在字段用于排序、faceting 或函數(shù)查詢時, docValues 將自動被使用。

在搜索過程中檢索 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ū)別:

  1. 訂單不被保留。為了簡單地檢索存儲的字段,插入順序是返回順序。對于 docValues,這是排序順序。
  2. 對于使用 SORTED_SET 的字段類型,將多個相同的條目合并為一個值。因此,如果插入值 4,5,2,4,1,則回報將是 1,2,4,5。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號