Solr 7 的重大變更

Solr 7 是 Solr 的一個主要新版本,它引入了新功能和一些可能會影響您現有安裝的其他變更。

升級規劃

在開始移轉組態和索引之前,Solr 7 中有一些重大變更需要考量。本頁旨在強調最大的變更 - 您可能需要注意的新功能,以及預設行為的變更和已移除的已棄用功能。

Solr 7 中有數百個變更,因此徹底檢閱Solr 升級注意事項以及您 Solr 執行個體中的 CHANGES.txt 檔案,將有助於您規劃移轉至 Solr 7 的程序。本節試圖強調您應該注意的一些主要變更。

您也應該考量您尚未升級的任何版本中對 Solr 所做的所有變更。例如,如果您目前使用的是 Solr 6.2,則除了 7.0 的變更之外,您還應該檢閱所有後續 6.x 版本中所做的變更。

重新索引您的資料被認為是最佳做法,如果可能的話,您應該嘗試這麼做。但是,如果重新索引不可行,請記住您一次只能升級一個主要版本。因此,Solr 6.x 索引將與 Solr 7 相容,但 Solr 5.x 索引將不相容。

如果您現在不重新索引,請記住,您將需要重新索引您的資料或升級您的索引,然後才能在未來發布時移轉到 Solr 8。

另請參閱升級 Solr 集群一節,以了解有關如何升級 SolrCloud 集群的詳細資訊。

新功能與增強功能

複製模式

直到 Solr 7,SolrCloud 副本模型的設計是允許在主要節點遺失時,任何副本都可以成為主要節點。這對大多數使用者來說非常有效,可以在叢集中出現問題時提供可靠的容錯移轉。但是,它在大型叢集中會付出代價,因為所有副本都必須隨時保持同步。

為了提供額外的彈性,新增了兩種新的副本類型,分別名為 TLOG 和 PULL。這些新類型提供了一些選項,讓副本僅透過從主要節點複製索引段來與主要節點同步。TLOG 類型還具有維護交易記錄(其名稱中的「tlog」)的額外優勢,這將使其在必要時能夠復原並成為主要節點;PULL 類型不維護交易記錄,因此無法成為主要節點。

作為此變更的一部分,傳統類型的複本現在被命名為 NRT。如果您沒有明確定義 TLOG 或 PULL 複本的數量,Solr 預設會建立 NRT 複本。如果此模型對您有效,您無需進行任何變更。

請參閱複本類型章節,以取得有關新複本模式的更多詳細資訊,以及如何在叢集中定義複本類型。

自動擴展

Solr 自動擴展是 Solr 中的一組新功能,旨在使管理 SolrCloud 叢集更容易且更自動化。

其核心在於,Solr 自動擴展為使用者提供了一種規則語法,用於定義在叢集中如何分配節點和分片的偏好和政策,目標是維持叢集中的平衡。從 Solr 7 開始,Solr 在決定放置使用各種 Collections API 命令建立或移動的新分片和複本時,會將任何政策或偏好規則納入考量。

其他功能與增強

組態和預設變更

新的預設 Configset

已對隨附 Solr 的 configset 進行了多項變更;不僅僅是其內容,還有 Solr 在這方面的行為

  • data_driven_configsetbasic_configset 已被移除,並由 _default configset 取代。 sample_techproducts_configset 也保留,旨在與 Solr 在 example/exampledocs 目錄中隨附的範例文件一起使用。

  • 建立新集合時,如果您未指定 configset,則將使用 _default

    • 如果您使用 SolrCloud,則 _default configset 將自動上傳到 ZooKeeper。

    • 如果您執行使用者管理的叢集或單節點安裝,則將自動建立 instanceDir,並以 _default configset 作為基礎。

無綱要改進

為了改進無綱要模式的功能,當 Solr 偵測到傳入欄位中的資料應具有基於文字的欄位類型時,Solr 現在的行為有所不同。

  • 預設情況下,傳入欄位將被索引為 text_general(您可以變更此設定)。欄位的名稱將與文件中定義的欄位名稱相同。

  • 一個複製欄位規則將被插入到您的綱要中,以將新的 text_general 欄位複製到名為 <name>_str 的新欄位。此欄位的類型將為 strings 欄位(以允許多個值)。文字欄位的前 256 個字元將被插入到新的 strings 欄位中。

如果您希望移除複製欄位規則,或變更插入到字串欄位的字元數量或使用的欄位類型,則可以自訂此行為。有關詳細資訊,請參閱無綱要模式章節。

由於複製欄位規則可能會減慢索引速度並增加索引大小,因此建議您僅在需要時才使用複製欄位。如果不需要在欄位上進行排序或分面,則應移除自動產生的複製欄位規則。

可以使用 update.autoCreateFields 屬性停用自動建立欄位。為此,您可以使用 Config API,並使用如下的命令

  • V1 API

  • V2 API

curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
curl http://host:8983/api/collections/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'

預設行為的變更

  • JSON 現在是預設回應格式。如果您依賴 XML 回應,您現在必須在請求中定義 wt=xml。此外,預設啟用行縮排(indent=on)。

  • sow 參數(「以空白分隔」的縮寫)現在預設為 false,這允許開箱即用地支援多字詞同義詞。此參數與 eDisMax 和標準/「lucene」查詢剖析器一起使用。如果未將此參數明確指定為 true,則在分析之前不會將查詢文字以空白分隔。

  • legacyCloud 參數現在預設為 false。如果 state.json 中不存在複本的項目,則該複本將不會註冊。

    這可能會影響使用者,他們啟動複本時會自動註冊為分片的一部分。可以透過在叢集屬性中使用以下命令設定屬性 legacyCloud=true 來恢復到舊的行為

    ./server/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:2181 -cmd clusterprop -name legacyCloud -val true

  • 如果 solrconfig.xml 中的 luceneMatchVersion 為 7.0.0 或更高版本,則 eDisMax 查詢剖析器參數 lowercaseOperators 現在預設為 false。低於 7.0.0 的 luceneMatchVersion 的行為保持不變(因此為 true)。這表示用戶端必須以大寫形式發送布林運算子(例如 AND、OR 和 NOT)才能被識別,或者您必須明確將此參數設定為 true

  • 如果 luceneMatchVersion 為 7.0.0 或更高版本,則 solrconfig.xml 中的 handleSelect 參數現在預設為 false。這會導致 Solr 在請求中存在 qt 參數時忽略它。如果您有不帶前導 '/' 的請求處理程式,您可以設定 handleSelect="true" 或考慮遷移您的組態。

    qt 參數仍用作 SolrJ 特殊參數,用於指定要使用的請求處理程式(尾部 URL 路徑)。

  • lucenePlusSort 查詢剖析器(也稱為「舊 Lucene 查詢剖析器」)已棄用,且不再隱式定義。如果您希望繼續使用此剖析器直到 Solr 8(屆時將被移除),則必須在您的 solrconfig.xml 中註冊它,例如:<queryParser name="lucenePlusSort" class="solr.OldLuceneQParserPlugin"/>

  • TemplateUpdateRequestProcessorFactory 的名稱從 Template 變更為 templateAtomicUpdateProcessorFactory 的名稱從 Atomic 變更為 atomic

    • 此外,TemplateUpdateRequestProcessorFactory 現在使用 {} 而不是 ${} 作為 template

棄用和移除的功能

點欄位是預設的數值類型

Solr 已全面實作 *PointField 類型,以取代基於 Trie* 的數值欄位。所有 Trie* 欄位現在都被視為已棄用,並將在 Solr 8 中移除。

如果您在綱要中使用 Trie* 欄位,則應盡快考慮移至 PointFields。變更為新的 PointField 類型將需要您重新索引資料。

空間欄位

以下與空間相關的欄位已棄用

  • LatLonType

  • GeoHashField

  • SpatialVectorFieldType

  • SpatialTermQueryPrefixTreeFieldType

請改為選擇以下其中一個欄位類型

  • LatLonPointSpatialField

  • SpatialRecursivePrefixTreeField

  • RptWithGeometrySpatialField

有關更多資訊,請參閱空間搜尋章節。

JMX 支援和 MBean

  • solrconfig.xml 中的 <jmx> 元素已被移除,取而代之的是在 solr.xml 中定義的 <metrics><reporter> 元素。

    如果缺少預設的 SolrJmxReporter 實例,且找到本機 MBean 伺服器,則會自動新增該實例,以提供有限的向後相容性。可以透過 solr.in.sh 中的 ENABLE_REMOTE_JMX_OPTS 或透過系統屬性(例如,-Dcom.sun.management.jmxremote)來啟用本機 MBean 伺服器。此預設實例會將所有登錄中的所有 Solr 指標匯出為階層式 MBean。

    也可以透過指定一個布林初始引數 enabled 設定為 falseSolrJmxReporter 組態來停用此行為。為了進行更細微的控制,使用者應明確指定至少一個 SolrJmxReporter 組態。

    另請參閱The <metrics><reporters> Element章節,其中描述如何在 solr.xml 中設定指標報告器。請注意,Solr 8 中可能會移除向後相容性支援。

  • MBean 名稱和屬性現在遵循指標中使用的階層式名稱。這也反映在 /admin/mbeans/admin/plugins 的輸出中,並且可以在 UI 外掛程式索引標籤中觀察到,因為現在所有這些 API 都從指標 API 取得其資料。舊的(大多是平面)JMX 視圖已被移除。

SolrJ

在 SolrJ 中進行了以下變更。

  • HttpClientInterceptorPlugin 現在是 HttpClientBuilderPlugin,且必須與 SolrHttpClientBuilder 而不是 HttpClientConfigurer 一起使用。

  • HttpClientUtil 現在允許透過 SolrHttpClientBuilder 而不是 HttpClientConfigurer 來設定 HttpClient 實例。不再使用環境變數 SOLR_AUTHENTICATION_CLIENT_CONFIGURER,請改用 SOLR_AUTHENTICATION_CLIENT_BUILDER

  • SolrClient 實作現在使用其自己的內部組態來設定 Socket 超時、連線超時以及允許重新導向,而不是在建置 HttpClient 實例時設定的預設值。請在 SolrClient 實例上使用適當的設定器。

  • HttpSolrClient#setAllowCompression 已移除,且必須啟用壓縮作為建構函式參數。

  • HttpSolrClient#setDefaultMaxConnectionsPerHostHttpSolrClient#setMaxTotalConnections 已移除。這些現在預設值非常高,且只能在建立 HttpClient 實例時透過參數變更。

其他棄用和移除

  • 綱要中的 defaultOperator 參數不再支援。請改用 q.op 參數。此選項已棄用多個版本。有關更多資訊,請參閱標準查詢剖析器參數章節。

  • 綱要中的 defaultSearchField 參數不再支援。請改用 df 參數。此選項已棄用多個版本。有關更多資訊,請參閱標準查詢剖析器參數章節。

  • mergePolicymergeFactormaxMergeDocs 參數已移除且不再支援。您應該改為定義 mergePolicyFactory。有關更多資訊,請參閱mergePolicyFactory 章節。

  • PostingsSolrHighlighter 已棄用。建議您改為使用 UnifiedHighlighter。有關此高亮顯示器的更多資訊,請參閱統一高亮顯示器章節。

  • 索引時期的權重提升已從 Lucene 中移除,Solr 也不再提供此功能。如果提供了任何權重提升,索引鏈將會忽略它們。作為替代方案,索引時期的評分因素應該索引到一個單獨的欄位中,並使用函數查詢與查詢分數結合。請參閱函數查詢章節以取得更多資訊。

  • StandardRequestHandler 已被棄用。請改用 SearchHandler

  • 為了提高 Collections API 中參數的一致性,MOVEREPLICA 命令的參數名稱 fromNode 以及 REPLACENODE 命令的 sourcetarget 已被棄用,並分別替換為 sourceNodetargetNode。舊名稱為了向後相容性將繼續運作,但在 Solr 8 中將會被移除。

  • 未使用的 valType 選項已從 ExternalFileField 中移除,如果您的 schema 中有此選項,您可以安全地移除它。

早期 6.x 版本中的重大變更

以下為早期 6.x 版本變更的摘要,重點介紹了 Solr 6.0 和 6.6 之間發布的重大變更,這些變更列在本指南的早期版本中。提及的棄用很可能已被 Solr 7 中的移除所取代,如上述章節所述。

再次提醒,這並非所有可能影響您安裝的變更的完整列表,因此,如果從 6.6 之前的任何版本升級,強烈建議您仔細查閱 CHANGES.txt。

  • Solr 的 contribs map-reducemorphlines-coremorphlines-cell 已被移除。

  • JSON Facet API 現在使用 hyper-log-log 來計算 numBuckets 基數,並在透過任何大於 1 的 mincount 過濾 bucket 之前計算基數。

  • 如果您使用歷史日期,特別是 1582 年或之前的日期,您應該重新索引以獲得更好的日期處理。

  • 如果您使用 method=stream 的 JSON Facet API (json.facet),您現在必須設定 sort='index asc' 才能獲得串流行為;否則它不會串流。提醒:method 是一個提示,不會更改其他參數的預設值。

  • 如果您使用 JSON Facet API (json.facet) 來對數值欄位進行 facet,並且如果您使用 mincount=0 或如果您設定前綴,您現在會收到錯誤,因為這些選項與數值 facet 不相容。

  • Solr 在 INFO 層級的記錄詳細程度已大幅降低,您可能需要更新日誌設定以使用 DEBUG 層級,才能看到您以前在 INFO 層級看到的所有日誌訊息。

  • 我們不再永久備份具有日期戳記副本的 solr.logsolr_gc.log 檔案。如果您依賴於 logs 資料夾中的 solr_log_<date>solr_gc_log_<date>,情況將不再如此。請參閱設定記錄章節,以了解自 Solr 6.3 以來的日誌輪換運作方式。

  • MiniSolrCloudCluster 上的 create/deleteCollection 方法已被棄用。客戶端應改用 CollectionAdminRequest API。此外,MiniSolrCloudCluster#uploadConfigDir(File, String) 已被棄用,改用 #uploadConfigSet(Path, String)

  • bin/solr.in.sh (Windows 上的 bin/solr.in.cmd) 現在預設已完全註解。先前並非如此,這造成了遮蔽現有環境變數的效果。

  • _version_ 欄位不再被索引,並且預設現在被定義為 indexed=false,因為該欄位已啟用 DocValues。

  • /export 處理器已變更,因此對於原始文件中不存在的數值欄位,不再傳回零 (0)。此變更的一個後果是,您必須意識到,如果原始文件中沒有值,某些元組將不會有值。

  • org.apache.solr.util.stats 中的 metrics 相關類別已被移除,改用 Dropwizard metrics 程式庫。任何使用這些類別的自訂外掛程式都應變更為使用 metrics 程式庫中的等效類別。作為其中的一部分,以下變更已套用於 Overseer 狀態 API 的輸出

    • 「totalTime」metric 已被移除,因為它不再被支援。

    • 為了與 Solr 其他部分的統計輸出保持一致,Overseer 狀態 API 中的 metric「75thPctlRequestTime」、「95thPctlRequestTime」、「99thPctlRequestTime」和「999thPctlRequestTime」已重新命名為「75thPcRequestTime」、「95thPcRequestTime」等等。

    • 為了與 Solr 其他部分的統計輸出保持一致,metric「avgRequestsPerMinute」、「5minRateRequestsPerMinute」和「15minRateRequestsPerMinute」已由對應的每秒速率取代,即「avgRequestsPerSecond」、「5minRateRequestsPerSecond」和「15minRateRequestsPerSecond」。

  • 已新增名為 UnifiedHighlighter 的新 highlighter。建議您嘗試使用 UnifiedHighlighter,方法是設定 hl.method=unified 並回報意見。它比其他 highlighter 更有效率/快速,尤其是與原始的 Highlighter 相比。請參閱 HighlightParams.java,其中列出了標註哪些 highlighter 使用的 highlight 參數。現在認為 hl.useFastVectorHighlighter 已被棄用,改用 hl.method=fastVector

  • maxWarmingSearchers 參數現在預設為 1,更重要的是,如果超出此限制,commit 現在會封鎖,而不是擲回例外 (這是好事)。因此,不再有 commit 重疊的風險。儘管如此,使用者仍應繼續避免過多的 commit。建議使用者從其 solrconfig.xml 檔案中移除任何預先存在的 maxWarmingSearchers 項目。

  • Complex Phrase 查詢解析器現在支援前導萬用字元。請注意它可能帶來的負擔,建議使用者在索引時間分析中使用 ReversedWildcardFilter。

  • JMX metric「avgTimePerRequest」(以及每個處理器的 metrics API 中對應的 metric) 過去是基於累計總時間和請求數量的簡單非衰減平均值。Codahale Metrics 實作會對此值套用指數衰減,這會將平均值嚴重偏向最後 5 分鐘。

  • 平行 SQL 現在使用 Apache Calcite 作為其 SQL 框架。作為此變更的一部分,預設的聚合模式已變更為 facet 而不是 map_reduce。SQL 聚合回應和某些 SQL 語法也發生了變更。請查閱SQL 查詢語言文件以取得完整詳細資訊。