Solr 9 的重大變更

Solr 9.0 是 Solr 的一個主要新版本。

本頁重點介紹最重要的變更,包括新功能和預設行為的變更,以及先前已棄用但現在已移除的功能。

Solr 9 升級規劃

在開始升級到 Solr 9 之前,請花時間檢閱從您目前版本到 Solr 9 的所有變更資訊。

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

徹底檢閱先前 8.x 版本中的重大變更中的清單,以及您 Solr 執行個體中的CHANGES.txt,將有助於您規劃遷移到 Solr 9。

升級先決條件

Solr 9 要求 Java 11 作為最低 Java 版本,並且也通過 Java 17 的測試。

如果使用 CloudSolrClient 連線到您的 SolrCloud 叢集,在將您的 SolrCloud 叢集升級到 9.0 版之前,所有用戶端應用程式中的 SolrJ 都必須升級到 8.10 或更高版本 (8.x)。否則,SolrJ 將無法連線到升級到 Solr 9 的叢集。

如果您有一個舊集合最初是使用 5.0 之前的 Solr 版本建立的,Solr 可能會將該集合的叢集狀態保留在 Zookeeper 根目錄的 /clusterstate.json 檔案中。Solr 9 不再支援此檔案。您必須在升級到 Solr 9 之前將此類集合升級到新的每個集合的 state.json 格式。這是在仍然使用 Solr 8.x 時呼叫集合 API MIGRATESTATEFORMAT動作來完成的。

如果您以獨立模式使用 Solr,並使用查詢提升元件及其資料目錄中的提升檔案,您必須將其移動到設定集資料夾中。

如果您依賴使用「master」或「slave」術語的 Solr KPI 的指標、警示或監視器,請更新您的系統,以便這些指標現在顯示「leader」和「follower」術語。

滾動升級

如果您計劃使用滾動升級模型來升級您的叢集(即依序升級每個節點,而不是建立一個全新的 9.x 叢集),請仔細閱讀以下內容。

從 Solr 8 滾動升級到 Solr 9 需要從 Solr 8.7 或更新版本升級。如果您運行的版本早於 8.7,我們建議您先升級到 8.11。

某些命令,例如還原集合,如果在升級期間執行,可能無法正確完成。它們可能需要在之後重新嘗試。

PKI 驗證

由 PKI 驗證保護的節點間通訊已更改格式。詳細資訊,請參閱PKI 驗證外掛程式

從 Solr 8 滾動升級到 Solr 9 需要以下多次重新啟動順序

  1. 升級到 Solr 9 並設定系統屬性:solr.pki.sendVersion=v1solr.pki.acceptVersions=v1,v2。這將允許 Solr 9 節點在升級過程中向 Solr 8 節點發送訊息。

  2. 使用 solr.pki.sendVersion=v2(預設,可以取消設定)和 solr.pki.acceptVersions=v1,v2 重新啟動。這將強制所有節點發送新的標頭。

  3. (可選)使用系統屬性 solr.pki.acceptVersions=v2(預設,可以取消設定)重新啟動,以防止過時的節點連線到您的叢集。

升級後重新建立索引

強烈建議您在主要版本升級後完整地重新建立文件的索引。詳細資訊,請參閱重新建立索引章節,其中涵蓋了如何重新建立索引的幾種策略。

在 Solr 8 中,可以透過 UninvertDocValuesMergePolicy 這個進階/專家工具,在不重新建立索引的情況下將 docValues 新增到 schema。由於 Lucene 9 的變更,這已不再可能。

Solr 9.7

SchemaVersion 升級到 1.7

預設的 schemaVersion 現在是 1.7。使用新的 schema 版本,大多數支援 docValues 的欄位和 fieldType 將預設啟用 docValues。請參閱啟用 Doc Values 章節,以取得完整列表。

此外,欄位預設將無法取消反轉。(uninvertible=false

為了從 schemaVersion 1.6 升級到 1.7,通常需要重新建立所有資料的索引。此重新建立索引無法就地進行Lucene 不允許將 docValues 新增到現有欄位。

但是,如果以下任何一種情況成立,則不需要重新建立索引

  • 所有適用的欄位都已在原始 schema 中啟用 docValues

  • schema 更新為明確停用 docValues,適用於所有未提供明確 docValues 預設值的欄位和 fieldType。

uninvertible=false 預設值對索引沒有影響,因此與重新建立索引的問題無關。

Solr 9.6

相依性升級

Lucene 已升級到 9.10.0,並且許多函式庫相依性已升級。有關特定升級的函式庫,請參閱https://solr.dev.org.tw/docs/9_6_0/changes/Changes.html

SolrJ

  • 由 Jetty Http 函式庫驅動的 Http2SolrClient 類別不再標記為實驗性。

  • Solrj 現在提供基於 java.net.http.HttpClient 的輕量級客戶端:HttpJdkSolrClient

  • SolrJ 現在提供經過改進的非同步請求 API

查詢

  • 可以透過請求參數停用分散式統計

  • 查詢逾時(限制)現在可以基於 CPU 時間以及實際時間

其他

  • 不活動的分片現在將定期清理

Solr 9.5

相依性升級

Solr 8.2 建議使用 Zookeeper 3.5.5,而現在搭配 Curator 5.5.0 需要Zookeeper 3.5.x 或更高版本。這主要影響使用 hadoop-auth 的使用者,但 Curator 的使用可能會影響 Solr 的其他部分。

全域斷路器

  • 斷路器現在可以全域配置,而不僅限於每個集合。有關更多資訊,請參閱配置斷路器

配置和易用性

  • Solr 現在將自動解析所有以 SOLR_ 為字首的環境變數,並設定對應的系統屬性。這對於透過環境變數配置 Solr 的更多方面很有用,例如容器。底線會取代為點,字串會轉換為小寫。例如,雖然您先前必須設定系統屬性 -Dsolr.clustering.enabled=true 來啟用叢集,但您現在可以設定等效的環境變數 SOLR_CLUSTERING_ENABLED=true 來代替。

  • 集合和副本屬性現在可以用作配置檔案(例如 solrconfig.xml)中的屬性替代變數。

  • 啟用 TLS 後,Solr 現在會自動重新載入更新的金鑰儲存和信任儲存檔案。

  • 追蹤支援已獲得許多品質改進,包括改進了分散式集合命令的追蹤,並增加了對使用 Apache 和 Jetty HTTP 客戶端發出的內部請求的涵蓋範圍。

Solr 9.4

內建 Config Set

  • 內建 ConfigSet(_defaultsample_techproducts_configs)現在使用預設的 autoSoftCommit 時間為 3 秒,這表示文件將在上傳後 3 秒內可搜尋。有關此變更將如何影響您的更多資訊,請參閱軟提交文件。升級具有自訂 ConfigSet 的現有雲端和使用案例將不會受到此變更的影響。

副本放置

  • 使用AffinityPlacementPlugin 時,預設的 minimalFreeDiskGB 值已從 20GB 降低到 5GB。因此,當使用預設設定時,由於可用磁碟空間不足而先前從副本放置中排除的節點,可能會在升級後被選中。

嵌入式 Zookeeper

  • 現在可以配置嵌入式 Zookeeper 以監聽(或繫結到)多個主機,而不僅限於 localhost,請參閱網路配置文件以取得更多資訊。

斷路器

  • 斷路器現在是可外掛的,您可以定義多個斷路器,包括自訂斷路器。現有的 CircuitBreakerManager 已被棄用,建議使用者切換到新的外掛程式。雖然舊的 CircuitBreakerManager 在斷路器跳閘時會傳回 HTTP 503,但新的外掛程式會傳回 HTTP 429。

安全性

  • 自 Solr 8.4.1/8.5.0 以來,solr.jetty.ssl.verifyClientHostName sysProp 和 SOLR_SSL_CLIENT_HOSTNAME_VERIFICATION envVar 的使用不正確。它反而被用來覆寫 HTTP2SolrClient 中的 solr.ssl.checkPeerName sysProp。此問題已修正,並且該設定再次告知伺服器在執行 mTLS 時,根據用戶端憑證檢查來源用戶端主機名稱。此選項預設仍為啟用。

  • 如果提供了 SOLR_SSL_CHECK_PEER_NAME,則 solr.jetty.ssl.sniHostCheck 選項現在預設為該值。這將使用戶端和伺服器主機名稱檢查設定受相同的環境變數控制。如果使用者想要單獨的用戶端/伺服器設定,他們可以在 SOLR_OPTS 中手動覆寫 solr.jetty.ssl.sniHostCheck 選項。

棄用

  • 已棄用 rid 請求 ID 查詢參數,改為使用永遠啟用的追蹤產生。若要停用 rid 產生,請將系統屬性 solr.disableRequestId 設定為 true。若要停用永遠啟用的追蹤產生,請將系統屬性 solr.alwaysOnTraceId 設定為 false

學習排名

  • FieldValueFeature 類別現在在設定 docValues=true 時一律使用 DocValues。當 docValues=true 和 stored=true 欄位屬性都設定時,LegacyFieldValueFeature 類別提供不使用 DocValues 的先前行為。

其他

  • 從 Solr 9.4 開始,使用 Lucene 9.8 及更高版本,DelegatingCollector.finish 與父類別的 LeafCollector.finish 方法衝突。任何擴充 DelegatingCollector 的自訂元件都需要將 finish 方法重新命名為 complete,以遵循 Solr 的實作。

Solr 9.3

二進位發行版本

分片管理

  • Solr 現在提供「安裝分片」API,允許離線建立(每個分片)索引的使用者將它們匯入 SolrCloud 分片中。

Solr CLI

  • 已移除 bin/solr -ibin/solr -info 選項,改為使用 bin/solr status 命令。

安全性

  • 不再透過 solrconfig.xml 中的配置或使用 config API 的動態等效項來啟用 stream.filestream.urlstream.body 參數的使用。舊的配置現在不起作用。相反,請設定環境變數:SOLR_ENABLE_REMOTE_STREAMING 或 SOLR_ENABLE_STREAM_BODY 或等效的系統屬性。

  • 已簡化指定包含敏感資訊的 sysProp 的方法。現在可以使用 sysProp -Dsolr.hiddenSysProps 或環境變數 SOLR_HIDDEN_SYS_PROPS 來提供以逗號分隔的模式列表,以比對應隱藏或編輯的 sysProp。有關更多資訊,請參閱hiddenSysProps 章節

    系統屬性 -Dsolr.redaction.system.pattern 已被棄用,請改用上述選項。

    <metrics> 下的 <hiddenSysProps> solr.xml 元素已被棄用。請改用 <solr> 下的 <hiddenSysProps> 標籤,該標籤接受以逗號分隔的字串。

  • Schema Designer(綱要設計工具) 現在使用與 ConfigSet Upload API(設定集上傳 API) 相同的信任模型。

官方 Docker 映像檔

  • 官方 Solr Dockerfile 的自訂方式已變更。自訂選項 SOLR_DOWNLOAD_URLSOLR_CLOSER_URLSOLR_DIST_URLSOLR_ARCHIVE_URL 已移除。指定 Solr 二進位檔自訂位置的唯一方法是透過 SOLR_DOWNLOAD_SERVER。如果伺服器 URL 包含 apache.org,則 Dockerfile 會檢查 gpg 簽名檔案。如果伺服器 URL 不包含 apache.org,則會跳過 gpg 簽名檢查。

    如果您想使用自訂版本的 Solr 建置 Solr 映像檔,仍然強烈建議使用 Solr 二進位 TGZ 中包含的 Dockerfile。自訂版本的 Solr 在建置時會包含此 Dockerfile。

預設情況下,現在已停用刪除不明核心的功能

  • 當 Solr 從檔案系統載入核心時,它會檢查 ZooKeeper 中是否有對應的叢集狀態。在 Solr 9.3 之前,如果不存在對應的條目,則會自動刪除核心以移除孤立的檔案。從 Solr 9.3 開始,預設情況下不再啟用此行為。請參閱不明核心刪除

使用 timeAllowed

  • 使用 timeAllowed 的查詢逾時的實作方式不同。它應該會更快,但精確度較低 – 不會在核心查詢處理之外讓查詢逾時(例如,不會取消拼字檢查或分面)。使用 solr.useExitableDirectoryReader 以使用先前的行為。請與 Solr 開發人員分享您的經驗!如果未使用 timeAllowed,則不應啟用先前的行為,因為不幸的是,它的效能影響現在會施加於所有查詢,即使是那些沒有 timeAllowed 的查詢。

v2 API

  • Solr 的實驗性「v2」API 在 9.3 版本中進行了一些改進。

    它現在正接近 Solr v1 API 提供的功能對等。特別是,9.3 為與別名屬性和集合快照互動新增了 v2「CRUD」端點。現在,幾個較低層級的「複寫」API 也提供 v2 對等項目。

    此外,v2 API 整體正在重新設計,使其更符合 REST 風格且更直觀。為此,9.3 對 v2 分片、複本以及備份建立和刪除 API 引入了不相容的回溯變更。一些較低層級的「命令」API 也進行了調整,包括:集合重新載入、集合重新命名、「強制領導者」、「平衡分片唯一」以及所有 Solr 的「記錄層級」和「記錄監看程式」API。使用 Solr v2 端點的用戶端應在升級之前,根據 CHANGES.txt 中修改的 API 完整清單檢查其使用情況。每個 API 的詳細資訊可在 9.3 參考指南中取得。

Solr 9.2

升級至 Jetty 10.x

  • 由於 Jetty 9.x 現在已終止生命週期,Solr 從 9.x 升級至 Jetty 10.x。Jetty 10.x 的最低 Java 版本為 Java 11,與 Solr 9 的最低 Java 版本相符。Jetty 記錄已再次被 slf4j 取代,與 Solr 相符。如需其他 Jetty 10.x 重點資訊,請參閱 https://webtide.com/jetty-10-and-11-have-arrived/

Jetty 設定

  • Solr 不再重複 server/libWEB-INF/lib(jetty-util、jetty-io 等)之間的某些 Jetty「伺服器」程式庫相依性。這是對二進位發行構件的改進,但 Jetty 預設不允許 Web 應用程式 (Solr) 共用這些程式庫。現在,server/contexts/solr-jetty-context.xml 會明確移除這些限制,允許 Solr 共用現在位於 server/lib/ext 中的這些「伺服器」jar。

  • 「暫時核心」功能現在已被棄用。

SSL 設定

  • 當使用 Solr (或 SolrJ) 與使用 HTTP2 的啟用 SSL 的 Solr 叢集時,預設 -Dsolr.ssl.checkPeerName 值現在為 **true**。這是在啟用 SSL中記載的內容,並且與原始 HttpSolrClient 的功能相符。

追蹤

  • 新增了一個新的 opentelemetry 模組,支援使用 gRPC 的 OTLP 格式中的 OTEL 追蹤。

Docker

  • 官方 Docker 映像檔和提供的 Dockerfile 的 OS 版本已從 Ubuntu 20 (focal) 升級至 Ubuntu 22 (jammy)。現在,Solr 的 Docker 映像檔需要 Docker 引擎版本 20.10.10 或更新版本。

無法升級其 Docker 引擎的使用者在啟動容器時需要指定 docker 命令列選項 --security-opt seccomp=unconfined

串流表達式

  • 串流表達式已從 Solrj 核心移至其自己的模組,名為 solrj-streaming。此變更只會影響在 Solr 外部的用戶端中使用過串流表達式類別的使用者。傳送至 /stream 處理常式的串流表達式仍將與之前完全一樣地運作。使用串流表達式類別的外部用戶端將需要更新其相依性,以參考 org.apache.solr groupId 下的 solrj-streaming 構件。

棄用

  • 從 Zookeeper 載入 solr.xml 已被棄用。請參閱設定 solr.xml

  • 分析元件已被棄用。請考慮使用JSON 分面 API 作為替代。如果 JSON 分面目前未涵蓋您需要的功能,請通知專案。

  • jaegertracer-configurator 模組已棄用,將在 Solr 10 中移除。使用者應開始移轉至新的 opentelemetry 模組。

Solr 9.1.1

Solr 9.1

查詢和索引

  • 為 DenseVectorField 新增了 Lucene91HnswVectorsFormat 編碼解碼器。為了使用新的編碼解碼器,需要重新建立索引。

SolrJ

SolrJ 開始被拆分。如果您使用 ZooKeeper 座標來建立 CloudSolrClient,則需要新增 solrj-zookeeper 的相依性。如果您使用 SolrJ 的 Maven POM 來相依於 SolrJ,則應透過可轉移的解析自動發生此情況。請考慮移轉至使用在用戶端的建置器中指定 Solr URL 清單的方式,而不是相依於 ZooKeeper。這不僅減少了相依性,而且還能夠限制 ZooKeeper 的存取,從而提高了安全性。

Zookeeper

Zookeeper 憑證支援現在遵循新的範例。舊類別 (例如 VMParamsAllAndReadonlyDigestZkACLProviderVMParamsSingleSetCredentialsDigestZkCredentialsProvider) 已被棄用,但至少在 10.0 之前仍受支援。鼓勵使用者在下一個主要版本發行之前升級至未棄用的類別。如需更多資訊,請參閱deployment-guide:zookeeper-access-control.adoc#solr-to-zookeeper-acls-workflow

Solr 9.0

查詢和索引

  • 透過 DenseVectorField fieldType 和 K 最近鄰 (KNN) 查詢剖析器進行密集向量「神經」搜尋

  • 管理 UI 支援 SQL 查詢。

  • 新增的 Snowball 詞幹分析器:印地語、印尼語、尼泊爾語、塞爾維亞語、坦米爾語和意第緒語。

  • 新增的 NorwegianNormalizationFilter

  • 隱含的 /terms 處理常式現在會傳回 SolrCloud 中所有分片的詞彙,而不僅僅是本機核心。使用者/應用程式可能會假設舊的行為。可以透過標準的 distrib=false 參數修改請求,以便僅使用接收請求的本機核心。

  • SQL 支援已移至 sql 模組。現有的 Solr 設定不需要任何與 SQL 相關的變更,但是需要安裝該模組 - 請參閱SQL 查詢語言章節。

  • JSON 聚合使用更正的樣本公式來計算標準差和變異數。JSON 聚合中標準差和變異數的計算與 StatsComponent 相同。

  • Json Facet 模組中的分面計數始終傳回 long 值,而不論分片數為何。

  • MacroExpander 不再會展開 expr 參數(串流表達式使用)內的 URL 參數。此外,建議使用者在建構包含使用者提供的資料的串流表達式時使用 InjectionDefense 類別,以避免類似 SQL 注入的風險。可以透過在啟動時傳遞給 JVM 的 -DStreamingExpressionMacros=true 來恢復展開 expr 參數的舊行為

  • 以原始 XML 序列化的欄位值(透過 [xml] 原始值 DocTransformer 和 wt=xml)的回應格式已變更。先前,值會直接放入為每個 <doc> 的最上層子元素,模糊相關的欄位名稱並產生不一致的 <doc> 結構。從 9.0 版開始,原始值會包裝在每個 <doc> 最上層的 <raw name="field_name">[…​]</raw> 元素中(或多值欄位的封閉 <arr name="field_name"><raw>[…​]</raw></arr> 元素內)。以這種方式剖析序列化欄位值的現有用戶端將需要相應地更新。

  • 醒目提示:hl.method=unified 是新的預設值。如果需要,請使用 hl.method=original 切換回。

  • solr.xml 中的 maxBooleanClauses 現在會遞迴強制執行。從舊版 Solr 升級的使用者可能會發現,某些涉及複雜內部查詢結構的請求(例如:使用 edismax 的長查詢字串,其中包含許多 qfpf 欄位,且包含查詢時間的同義詞擴展),在過去可以正常運作,現在會達到此限制而失敗。建議處於這種情況的使用者考慮其查詢/配置的複雜性,並在必要時增加 maxBooleanClauses 的值。

  • 現在,對巢狀文件進行原子/部分更新時,必須使用 _root_ 欄位清楚地顯示該文件不是根文件。Solr 8 會回退使用 _route_ 參數,但現在不再這樣做了。

安全性

  • 新的 憑證驗證外掛程式,可讓端對端使用 x509 用戶端憑證進行驗證和授權。

  • 改進了使用 PKI 驗證外掛程式時的安全性。

  • 升級至 Zookeeper 3.7,允許 TLS 保護的 ZK 通訊。

  • 所有請求處理程序都支援安全性權限。使用者可能需要調整他們的 security.json

  • 可以透過系統屬性停用管理 UI。

  • BasicAuthPluginJWTAuthPlugin 中的屬性 blockUnknown 現在預設值為 true 而不是 false。此變更不向後相容。如果您需要 9.0 之前的預設行為,則需要在 security.json 中明確設定 blockUnknown:false

  • Solr 現在預設啟用 Java 安全管理器執行。Hadoop 使用者可能需要停用此功能。

  • Solr 現在預設繫結到 localhost 網路介面,以提高開箱即用的安全性。需要更廣泛公開 Solr 的管理員可以在他們的 Solr 包含檔案 (solr.in.sh/solr.in.cmd) 中變更 SOLR_JETTY_HOST 屬性。

  • Solr 內嵌的 zookeeper 預設僅繫結到 localhost。此內嵌的 zookeeper 不應在生產環境中使用。如果您依賴先前的行為,則可以在 solr/server/solr/zoo.cfg 中變更 clientPortAddress

  • Jetty 低階請求日誌記錄 (NCSA 格式) 現在預設為啟用,並保留 3 天的日誌。這可能需要比 8.x 版更多的磁碟空間用於日誌。有關如何變更此設定,請參閱設定日誌記錄

  • Hadoop 驗證支援已移至新的 hadoop-auth 模組。使用者需要將模組 hadoop-auth 新增至類別路徑。外掛程式的套件名稱也已變更為 org.apache.solr.security.hadoop,但仍然可以載入為簡寫形式 class="solr.HadoopAuthPlugin"class="solr.ConfigurableInternodeAuthHadoopPlugin"class="solr.KerberosPlugin" - 請參閱Hadoop 驗證外掛程式章節。

  • JWTAuthPlugin 已移至模組。使用者需要將模組 jwt-auth 新增至類別路徑。外掛程式的套件名稱也已變更為 org.apache.solr.security.jwt,但仍然可以載入為簡寫形式 class="solr.JWTAuthPlugin"

  • 相依性更新 - 許多相依性更新移除了相依性中的多個安全性問題,從而使 Solr 更加安全。

  • 定義 shards 參數允許 URL 的允許清單不再位於 shardHandler 設定中。它由 solr.xml 檔案的 allowUrls 頂層屬性定義。有關詳細資訊,請參閱 solr.allowUrls 的格式 文件。

  • 為了提高安全性,StatelessScriptUpdateProcessorFactory 已重新命名為 ScriptUpdateProcessorFactory,並移至scripting 模組,而不是作為 Solr 核心的一部分提供。此模組需要明確啟用。

  • 為了提高安全性,XSLTResponseWriter 已移至 scripting 模組,而不是作為 Solr 核心的一部分提供。此模組需要明確啟用。

穩定性和可擴展性

  • 速率限制提供了一種根據使用量指標來限制更新和搜尋請求的方法。

  • 新的 工作管理 介面允許將任務宣告為可取消和可追蹤。

  • 可以在 Solr 中指定 節點角色。此版本開箱即支援 overseerdata 角色。

  • 新的外掛 副本放置外掛程式 API,取代了自動擴展框架。

  • 支援分散式處理叢集狀態更新和集合 API 呼叫,而無需依賴 Overseer。

建置和 Docker

  • Solr 現在獨立於 Lucene(獨立的 Apache 專案)建置和發佈。

  • 建置系統已切換為 Gradle,不再使用 Ant + Ivy。

  • Docker 映像檔建立現在是 Apache Solr GitHub 儲存庫的一部分。

  • Docker 映像檔文件現在是參考指南的一部分。

  • 官方 Docker 映像檔已升級為使用 JDK17 (由 Eclipse Temurin 提供),並能夠建立功能相同的本機映像檔。

日誌記錄和指標

  • 指標處理程序僅依賴 SolrJ 而非核心,並有其自己的 log4j2.xml,不再共用 Solr 的日誌記錄設定。

  • 現在只有 SearchHandler 及其子類別有「本機」指標。現在會將其追蹤為另一個具有「[shard]」後綴的處理程序,例如「/select[shard]」。不再有 ".distrib." 命名的指標;所有指標都被假設為這樣,除了「[shard]」之外。預設的 Prometheus 匯出器設定會將該元件分割為一個名為「internal」的新標籤。範例 Grafana 儀表板現在會篩選以包含或排除此標籤。

  • 「Prometheus 匯出器」的預設連接埠已從 9983 變更為 8989,因此您可能需要在升級後調整您的設定。

  • 日誌記錄現在預設為非同步。在發生硬性崩潰時,可能會丟失一些日誌訊息。如果這是不可接受的,請切換回同步日誌記錄,請參閱 log4j2 設定檔中的註解 (預設為 log4j2.xml)。

  • Log4J 設定 & Solr MDC 值 - Solr 設定供日誌記錄呼叫使用的 MDC 值(例如集合名稱、分片名稱、副本名稱等…​)已修改為現在是「裸」值,沒有過去版本中包含的特殊單字元前綴。Solr 的預設 log4j2.xml 設定檔已修改為在作為 <PatternLayout/> 的一部分包含在日誌訊息中時,將這些相同的前綴附加到 MDC 值。希望在升級後確保 Solr 9.x 日誌格式保持一致的使用者,需要對他們的日誌記錄設定檔進行類似的變更。有關更多詳細資訊,請參閱 SOLR-15630

  • Jetty 請求日誌現在預設為啟用,也就是說,記錄每個請求。

  • prometheus-exporter 不再以 Solr 模組的形式打包。它可以在 solr/prometheus-exporter/ 下找到。

  • 現在可以透過環境變數(例如在 solr.in.shsolr.in.cmd 中)或作為系統屬性(例如在 SOLR_OPTS 中)輕鬆啟用 Solr 模組(以前稱為 contribs)。範例:SOLR_MODULES=extraction,ltr

棄用和移除

  • 資料匯入處理程序 (DIH) 現在是一個獨立的專案;它不再是 Solr 的一部分。

  • 不再支援 clusterstate.json,並且已移除 MIGRATESTATE API。如果您的集合使用 clusterstate.json,則需要採取一些步驟,本文件的其他地方會說明這些步驟。

  • 已移除自動擴展框架。有關其他選項,請參閱副本放置外掛程式

  • 已移除 LegacyBM25SimilarityFactory

  • 已移除舊的 SolrCache 實作(LRUCache、LFUCache、FastLRUCache)。使用者必須修改他們現有的設定以改用 CaffeineCache。

  • VelocityResponseWriter 現在是一個獨立的專案;它不再是 Solr 的一部分。這包括所有先前包含的 /browsewt=velocity 範例。

  • 已移除跨資料中心複寫。

  • 缺少 HTTP2 支援的 SolrJ 用戶端(如 HttpSolrClientLBHttpSolrClient)已棄用。舊的 CloudSolrClient 已重新命名為 CloudLegacySolrClient 並已棄用。

  • 已移除 SimpleFSDirectoryFactory,改用 NIOFSDirectoryFactory。

  • 已移除已棄用的 HttpSolrClient.RemoteSolrExceptionHttpSolrClient.RemoteExecutionException。所有用法都由 BaseHttpSolrClient.RemoteSolrExceptionBaseHttpSolrClient.RemoteExecutionException 取代。

  • 已移除 maxShardsPerNode 參數,因為它已損壞且與其他副本放置策略不一致。應該改用其他相關的放置策略,例如自動擴展策略或基於規則的放置。

  • 二進位發行版不再包含 test-framework jar。

  • 已移除已棄用的 BlockJoinFacetComponent 和 BlockJoinDocSetFacetComponent。建議使用者遷移到 JSON Facet API 中的 uniqueBlock()。

  • 核心層級管理 API 端點 /admin/threads/admin/properties/admin/logging 現在僅在節點層級可用。

其他

  • Contrib 模組現在僅為「模組」。您可以透過環境變數 SOLR_MODULES 輕鬆啟用模組。

  • 作為獨立模組提出的功能包括:HDFS、Hadoop-Auth、SQL、Scripting 和 JWT-Auth。

  • 發行版中的「dist」資料夾已移除。請更新您的 solrconfig.xml 中的 <lib> 項目以使用新的位置。

    • solr-coresolr-solrj jar 可以在 server/solr-webapp/webapp/WEB-INF/lib/ 下找到。

    • Solr 模組 jar 及其相依性可以在 modules/<module-name>/lib 中找到,每個模組都單獨打包。

    • solrj-deps (SolrJ 相依性) 不再與其他伺服器 jar 分開。

    • 如果您要手動載入 SolrJ,請參閱 SolrJ Maven 構件,以查看您需要從 server/solr-webapp/webapp/WEB-INF/lib/server/lib/ext/ 中包含的確切相依性。如果您計劃將 SolrJ 用作 JDBC 驅動程式,請參閱 JDBC 文件

    • 更多資訊可以在 Libs 文件中找到。

  • SolrJ 類別 CloudSolrClient 現在支援 HTTP2。它有一個新的 Builder。有關此類別的 8.x 版本,請參閱 CloudLegacySolrClient

  • 在備份請求回應中,response 鍵現在使用映射來傳回資訊,而不是清單。這僅適用於以 JSON 格式傳回資訊的使用者,這是預設行為。

  • SolrMetricProducer / SolrInfoBean API 已變更,並且需要更新實作這些 API 的第三方元件。

  • 已完全移除黑名單/白名單術語。JWTAuthPlugin 參數 algWhitelist 現在為 algAllowlist。舊參數在 9.x 版本中仍然可以使用。環境變數 SOLR_IP_WHITELISTSOLR_IP_BLACKLIST 已不再支援,並已替換為 SOLR_IP_ALLOWLISTSOLR_IP_DENYLIST

  • Solr 備份 - 現在備份的非同步回應會正確地聚合並傳回資訊。對於集合的快照備份請求回應,新增了額外的欄位 indexVersionindexFileCount 等,與增量備份請求回應類似。

  • 如果您正在使用 HDFS 備份儲存庫,您需要將儲存庫類別變更為 org.apache.solr.hdfs.backup.repository.HdfsBackupRepository - 請參閱HDFS 備份儲存庫章節。

  • HDFS 儲存支援已移至一個模組。現有的 Solr 設定不需要任何與 HDFS 相關的變更,但是需要安裝該模組 - 請參閱在 HDFS 上使用 Solr 章節。

  • 「cat」串流表達式使用的資料夾 $SOLR_HOME/userfiles 不再於啟動時自動建立。使用者必須建立此資料夾。

  • Solr 不再要求 $SOLR_HOME 中有 solr.xml。如果找不到,Solr 將改為使用 $SOLR_TIP/server/solr/solr.xml 中的預設檔案。您可以透過設定環境變數 SOLR_SOLRXML_REQUIRED=true 或系統屬性 -Dsolr.solrxml.required=true 來恢復到 9.0 之前的行為。如果使用內嵌的 ZooKeeper 啟動,Solr 也不再要求 $SOLR_HOME 中有 zoo.cfg

  • base_url 已從儲存的叢集狀態中移除。如果您能夠將所有用戶端應用程式的 SolrJ 升級到 8.8.x,則可以設定 -Dsolr.storeBaseUrl=false(在 Solr 8.8.1 中引入),以使 Zookeeper 中儲存的狀態與未來版本的 Solr 更好地對齊;從 Solr 9.x 開始,base_url 將不再儲存在儲存的狀態中。但是,如果您無法將所有用戶端應用程式的 SolrJ 升級到 8.8.x,則應設定 -Dsolr.storeBaseUrl=true,以便 Solr 繼續將 base_url 儲存在 Zookeeper 中。有關背景資訊,請參閱:SOLR-12182SOLR-15145。對 solr.storeBaseUrl 系統屬性的支援將在 Solr 10.x 中移除,並且將不再儲存 base_url

  • 分析器元件現在可以根據欄位類型配置,透過其 SPI 名稱進行查找。

  • solr-extraction 模組已清理,以產生 solr-extraction- jar 而不是 solr-cell- jar。

  • 模組中使用的額外 Lucene 函式庫不再封裝在二進制發行版本中模組目錄下的 lucene-libs/ 中。相反地,這些函式庫將與 lib/ 中所有其他模組相依性一起包含。

較早 8.x 版本中的重大變更

以下是 Solr 8.1 和 8.11 之間發布的重大變更清單。

請務必仔細查看此清單,以便了解您目前執行的 Solr 版本與 Solr 9.0 之間可能發生的變更。

Solr 8.11

請參閱8.11 發行說明,以了解 Solr 8.11 的主要新功能概述。

升級到 8.11.x 時,使用者應注意 8.10 的以下主要變更。

支援多種驗證方案

兩個新的驗證和授權外掛程式提供支援來配置多種驗證方案。

MultiAuthPlugin 允許組合兩種或多種驗證方法,例如 JWT 和基本驗證。

MultiAuthPlugin 也正在使用時,會使用 MultiAuthRuleBasedAuthorizationPlugin,並組合為所有外掛程式定義的各種角色,以判斷使用者帳戶的正確角色分配。

有關配置這些外掛程式的資訊,請參閱以下章節

ZooKeeper chroot

現在可以在啟動時建立 ZooKeeper chroot(如果它尚不存在)。請參閱使用 bin/solr 的 -z 參數章節以取得範例。

其他變更

還有一些其他小變更值得注意

  • 現在,預定義的 config-read 權限可以正確管理對各種與組態相關的 API 的存取權。另請參閱預定義權限

  • S3BackupRepository 支援配置 AWS Profile(如果需要)。另請參閱S3BackupRepository

  • 此外,在 SPLITSHARD 作業之後,備份現在可以正確地成功執行,並且可以正確地處理增量備份清除。

  • SolrJ 現在支援上傳配置集。

Solr 8.10

請參閱8.10 發行說明,以了解 Solr 8.10 的主要新功能概述。

升級到 8.10.x 時,使用者應注意 8.9 的以下主要變更。

Schema Designer UI

管理 UI 中新增了一個新畫面,可讓您使用文件以互動方式設計 Solr 結構描述。

設計工具畫面為您提供安全的環境,讓您可以

  • 上傳或貼上範例文件以識別欄位。

  • 取得 Solr 認為欄位中欄位類型應為何的「初步」猜測。

  • 編輯欄位、欄位類型、動態欄位和支援檔案。

  • 查看欄位的分析如何影響文字。

  • 測試結構描述變更如何影響查詢時間行為。

  • 將您的變更儲存到配置集中,以用於新的集合。

請參閱Schema Designer 章節以取得完整詳細資料。

S3 中的備份

繼 Solr 8.8 中備份的重新設計(允許在 Google Cloud 環境中儲存增量備份)之後,Solr 8.10 提供在 Amazon S3 儲存貯體中儲存備份的支援。

請參閱S3BackupRepository 章節以了解如何配置。

安全性管理 UI

Solr 的管理 UI 也取得了一個新的畫面,以支援使用者、角色和權限的管理。

當透過 bin/solr auth 或手動安裝 security.json 檔案啟用驗證和/或授權時,新的 UI 即可運作。在此之前,它會提供警告,指出您的 Solr 實例不安全。

請參閱安全性 UI 章節以取得詳細資料。

Solr SQL 改善

Solr 的 SQL 功能已進行多項改善

  • 新增了對 LIKEIS NOT NULLIS NULL 和萬用字元(適用於簡化的 LIKE 功能)的支援。

  • 新增了兩個新的彙總函式,COUNT(DISTINCT field)APPROX_COUNT_DISTINCT(field)

  • 使用 ORDER BY 子句的查詢可以支援 OFFSETFETCH 作業。

  • 現在可以傳回多值欄位。

  • 簡化了使用者權限,因此對查詢端點 /sql/select/export 的存取權足以完整存取所有 SQL 查詢。

shards.preference

shards.preference 參數的新選項允許根據副本是否為領導者來選擇節點。現在加入 shards.preference=replica.leader:false 將會限制查詢僅限於目前不是其分片領導者的副本。

請參閱shards.preference 參數章節以取得詳細資料和範例。

指標與 Prometheus 匯出器

指標 API 中的新 expr 選項允許根據正則表達式對指標進行更進階的篩選。請參閱指標 API 章節以取得範例。

Prometheus 匯出器的預設 solr-exporter.config 已獲得改進,可以使用指標 API 中的新 expr 選項來取得一組較小的指標。匯出的預設指標仍然包含大多數指標,但配置將更容易根據需要修剪。這應該有助於在 Prometheus 監控的繁忙叢集中提供效能改善。

ZooKeeper 憑證

現在可以將 ZooKeeper 憑證儲存在檔案中,其位置是使用系統屬性定義的,而不是以純文字傳遞。請參閱開箱即用的憑證實作以了解如何進行設定。

Solr 8.9

請參閱8.9 發行說明,以了解 Solr 8.9 的主要新功能概述。

升級到 8.9.x 時,使用者應注意 8.8 的以下主要變更。

備份與還原

Solr 8.9 對 Solr 的備份和還原支援進行了廣泛的變更。

Solr 8.9 中引入了一種新的備份格式,取代了之前的快照式備份。這種新的格式啟用「增量」備份。重複備份到給定位置將利用其前身儲存的資料,並且只會對自上次備份以來已變更的檔案進行操作。預設支援此功能,只需將每個備份檔案儲存在相同的位置即可。

舊格式和新格式不相容,儘管舊格式(所有檔案的完整快照)中的備份仍然可以使用,以便在目前還原到 Solr。舊格式已正式棄用,並且很可能會在 Solr 9.0 中移除對它的支援。

在目前,可以透過定義參數 incremental=false 來建立舊格式。不過,同樣地,此支援很可能會在 Solr 9.0 中移除。

有關備份的更多文件,請參閱備份和還原

用於備份的新 Collections API 命令

  • LISTBACKUP:列出儲存在指定儲存庫位置的每個備份的相關資訊。有關更多詳細資料,請參閱列出備份

  • DELETEBACKUP:從儲存庫刪除指定的備份。有關更多詳細資料,請參閱刪除備份

在 8.9 中也提供了一個新的備份儲存庫選項,即使用 Google Cloud Storage (GCS)。這是一個模組(位於 modules/gcs-repository 中)。有關配置詳細資料,請參閱GCSBackupRepository。Solr 社群正在努力在不久的將來新增對 S3 儲存貯體的支援。

巢狀文件

子文件轉換器 (Child Doc Transformer) 的 childFilter 參數不再套用查詢語法跳脫,因為這與 Solr 的其他部分不一致且具有限制。這裡指的是 [child childFilter='field:value']。在 8.0 之前也沒有任何跳脫處理。

折疊與展開

  • 區塊折疊 (BlockCollapse):如果文件是以相同折疊鍵的文件在索引中連續索引的方式 (或是可以這樣索引) 建立索引,新的「區塊折疊」功能可以比傳統折疊提供顯著的速度提升。

    請參閱 區塊折疊 以了解詳細資訊。

  • 展開空群組 (Expand Null Groups):新的參數 expand.nullGroup 允許傳回一個展開的群組,其中包含在展開欄位中沒有值的文檔。請參閱 展開元件 以了解詳細資訊。

就地更新

新的請求參數 update.partial.requireInPlace=true 允許告知 Solr,如果沒有滿足所有必要的條件來允許就地更新成功,則「快速失敗」。另請參閱 就地更新

指標歷史

指標歷史功能 (允許長期儲存和聚合 Solr 指標) 已被棄用,並將在 9.0 中移除。

嵌入式 Solr 伺服器

使用 EmbeddedSolrServer 時,它將不再關閉傳遞給它的 CoreContainer 實例。

Solr 8.8

升級到 8.8.x 的使用者應注意 8.7 版本以下的主要變更。

巢狀文件

  • 當對子文件執行原子/部分更新時

    • 提供 _root_ 欄位(根文件的 ID),以便 Solr 理解您正在操作子文件而不是根文件。如果沒有提供,Solr 會查看 _route_ 參數,但這在未來可能會變更,因為它不是一個理想的替代方案。如果兩者都不存在,Solr 會假設您正在更新根文件。如果此假設不正確,Solr 將執行廉價檢查,通常可以偵測到問題,並拋出例外來提醒您需要指定根 ID。此向後不相容的變更旨在提高效能和穩健性。

    • 此功能不再要求 _root_ 欄位具有 stored=truedocValues=true。您可能因為其他目的而保留它(例如,用於 uniqueBlock(…​))。

    • 此功能不再需要 _nest_path_ 欄位,但您可能應該繼續定義它,因為它對其他用途很有用。

已移除的模組

  • 由於提供線上搜尋結果叢集處理的相依性缺少 Java 1.8 相容性,搜尋結果叢集模組 (Carrot2) 已從 8.x Solr 中移除。該模組將在 Solr 9.0 中重新引入。

學習排名

指標

  • SolrCloud 的 Overseer 已新增兩個指標

    • solr_metrics_overseer_stateUpdateQueueSize

    • solr_metrics_overseer_collectionWorkQueueSize

Prometheus 匯出器

  • Prometheus 匯出器包含的 ./bin 指令碼現在允許透過環境變數使用自訂 java 選項。如需更多詳細資訊,請參閱 環境變數選項 一節。

  • 預設的 Grafana 儀表板現在包含用於查詢效能監控的面板。預設的 Prometheus 匯出器組態包含每秒查詢數 (QPS) 和第 95 個百分位數 (P95) 等指標,以填入新的面板。

  • 預設的 Prometheus 匯出器組態也包含上面在指標中提及的兩個新指標。

Solr Home

  • 識別 'Solr Home' (solr.solr.home) 的內部邏輯已重構,以減少測試時的錯誤。使用 SolrPaths.locateSolrHome()new SolrResourceLoader 的外掛程式開發人員應檢查棄用警告,因為現有的一些功能將在 9.0 中移除。 SOLR-14934 有關此變更的更多技術細節,供相關人員參考。

base_url 從儲存的狀態中移除

從 Solr 8.8.0 開始,base_url 屬性已從複本的儲存狀態中移除 (SOLR-12182)。如果您的所有用戶端應用程式都可以將 SolrJ 升級到 8.8.x,則可以設定 -Dsolr.storeBaseUrl=false (在 Solr 8.8.1 中引入),以使 ZooKeeper 中儲存的狀態與未來版本的 Solr 更好地對齊。但是,如果無法將所有用戶端應用程式的 SolrJ 升級到 8.8.x,則請保留預設的 -Dsolr.storeBaseUrl=true,以便 Solr 繼續在 ZooKeeper 中儲存 base_url

在從先前版本的 Solr 滾動升級到 8.8.0 期間,您也可能會在集合狀態更新中看到一些 NPE。在將叢集中的所有節點升級到 8.8.0 之後,集合應該會完全恢復。如果升級後有任何複本未恢復,請觸發另一個滾動重新啟動以重新選出領導者。

Solr 8.7

請參閱 8.7 發行說明 以了解 Solr 8.7 的主要新功能概觀。

升級到 8.7.x 的使用者應注意 8.6 版本以下的主要變更。

自動調整

  • 如果從 8.6.0 升級,請參閱下方的 8.6.1 升級說明,以了解 8.6.0 中引入的效能下降問題,這些問題需要一些干預才能解決。如果您已經使用 8.6.1 或更高版本,則可以忽略這些說明。

棄用

  • 自動調整架構現在已正式棄用,並將在 Solr 9.0 中移除。Solr 社群正在開發可外掛的 API 來取代此功能,目標是在 9.0 發佈時準備就緒。棄用包含:自動調整政策、觸發器、withCollection 支援、模擬架構、UI 中的自動調整建議索引標籤、autoAddReplicasUTILIZENODE 命令。

  • 同樣地,基於規則的複本放置策略已被棄用,並將在 Solr 9.0 中由複本放置和叢集事件的 API 取代,並採用基於外掛程式的實作。

  • 在 LUCENE-9576 中,已移除偵測旋轉磁碟的支援。Solr 中對應的 spins 指標仍然存在,但現在它們始終傳回 false,並將在 Solr 9.0 中移除。

更新的使用者管理叢集術語

  • Solr 已在程式碼和所有文件中將「master」和「slave」等詞彙替換為「leader」和「follower」。

    此功能僅在參數名稱方面有所變更,我們不預期在升級到 8.7 甚至稍後的 9.0 時會有任何回溯相容性問題。

    但是,使用者應在完成叢集中所有節點的升級後,更新其 solrconfig.xml 檔案。將您的組態與 使用者管理索引複寫 中更新的組態範例進行比較,將顯示需要變更的範例,但以下是主要變更

    1. 在複寫領導者上,在 /replication 請求處理程式的定義中

      1. 將「master」替換為「leader」。

      2. 如果先前在任何追隨者 solrconfig.xml 檔案定義的名稱中使用「slave」,則將其替換為「follower」。此檔案可以命名為任何名稱,因此您可以根據需要將其變更為任何名稱。

      3. 如果先前在複寫重複器組態中使用「slave」,則將其替換為「follower」。

    2. 在複寫追隨者上,在 /replication 請求處理程式的定義中

      1. 將「masterUrl」替換為「leaderUrl」。

      2. 如果先前在重複器組態中使用「slave」,則將其替換為「follower」。

JSON 分面

  • 8.7 版中包含 relatedness() 統計函數的效能增強功能。這些功能在高基數欄位中產生最大的好處,並且如果使用較低基數的欄位,則可以使用新的 sweep_collection 參數停用這些功能。如需詳細資訊,請參閱 relatedness() 選項 一節。

solr.in.sh / solr.in.cmd

  • Solr 依賴 solr.in.shsolr.in.cmd 中定義的 SOLR_STOP_WAIT 參數來決定 啟動 時要等待的時間長度。新的參數 SOLR_START_WAIT 允許定義 Solr 應等待啟動完成的時間長度。

    如果超過此參數設定的時間,Solr 將結束啟動程序,並將 solr.log 檔案的最後幾行傳回終端機。

    依預設,此參數設定為與 SOLR_STOP_WAIT 相同的值。

  • 預設的 ZooKeeper 用戶端逾時 (ZK_CLIENT_TIMEOUT) 現在為 30 秒(30000 毫秒),而不是 15 秒。

設定集

  • 現在可以透過提供 overwrite=true 參數給 組態集 API,在上傳變更時覆寫現有的組態集。

    一個相關的參數是 cleanup=true,它允許從覆寫後剩餘的舊組態集中刪除任何檔案。

    這兩個參數的預設值都是 false

  • 當刪除具有自動建立組態集的集合時(即,組態集是在建立集合時從 _default 集合複製而來),如果該組態集未被任何其他集合使用,也會被刪除。

記錄

  • 現在會為所有分散式搜尋請求(在 SolrCloud 中)記錄請求 ID (rid),可用於關聯整個系統中的查詢事件。如果需要,可以新增參數 disableRequestId=true 來停用此功能。

Solr 8.6.1

請參閱 8.6.1 發行說明 以了解 Solr 8.6.1 中包含的修正概觀。

升級到 8.6.1 的使用者應注意 8.6.0 版本以下的主要變更。

自動調整

  • 如 8.6 升級說明中所述,從 8.6.0 開始提供了預設的自動調整政策。此預設的自動調整政策導致在大型叢集 (50 個以上的集合) 中,集合建立呼叫的速度越來越慢。

    在 8.6.1 中,已移除預設的自動調整政策,除非已明確建立政策,否則叢集將不會使用自動調整。如果您的叢集正在執行 8.6.0 且未使用明確的自動調整政策,請升級到 8.6.1 並透過以下命令移除預設的叢集政策和喜好設定。

    localhost:8983 替換為您的 Solr 端點。

    curl -X POST -H 'Content-type:application/json'  -d '{set-cluster-policy : [], set-cluster-preferences : []}' https://127.0.0.1:8983/api/cluster/autoscaling

    此資訊僅與從 8.6.0 升級的使用者相關。如果從較早的版本升級到 8.6.1+,則可以忽略此警告。

Solr 8.6

請參閱 8.6 發行說明 以了解 Solr 8.6 的主要新功能概觀。

升級到 8.6.x 的使用者應注意 8.5 版本以下的主要變更。

支援區塊最大 WAND

Lucene 在 8.0 中增加了對區塊最大 WAND 的支援,而 8.6 也將此功能提供給 Solr。

這可以透過不計算不太可能出現在頂部結果集中的結果分數來顯著提高效能。

當使用新的查詢參數 minExactCount 時,會啟用此功能。此參數會告知 Solr 準確計算命中次數,直到至少達到此值。一旦達到此值,Solr 就可以跳過分數不夠高而無法進入頂部文件集的文件,這有潛力大幅加速搜尋。

請注意,使用此參數時,搜尋的命中計數可能不準確。命中計數保證在 minExactCount 的值之內是準確的,但任何高於該值的返回命中計數都可能是近似值。

所有回應中都包含一個新的布林屬性 numFoundExact,以指示回應中的命中計數是否預期為精確值。

關於此新功能的更多資訊,請參閱 minExactCount 參數 章節。

自動調整

  • 注意:自 8.6.1 版本起,已移除預設的自動縮放策略。

    Solr 現在包含預設的自動縮放策略。此策略可以使用您的自訂規則覆寫,或者透過指定一個空策略來取代預設策略。

  • ComputePlan 動作現在支援集合選擇器,以便根據集合屬性識別集合,以決定應對哪些集合執行操作。

安全性

  • 在 Solr 8.6 之前,接受檔案系統位置的 Solr API,例如核心建立、備份、還原和其他操作,不會驗證路徑,Solr 會允許任何絕對或相對路徑。從 8.6 開始,預設只允許相對於 SOLR_HOMESOLR_DATA_HOMEcoreRootDir 的路徑。

    如果您需要建立核心或在預設路徑之外儲存備份,您需要告知 Solr 允許哪些路徑。solr.xml 中的一個新元素稱為 allowPaths,它接受一個以逗號分隔的允許路徑列表。

    當使用 8.6 隨附的 solr.xml 檔案時,您可以透過系統屬性 solr.allowPaths 設定允許的路徑列表。請參閱 bin/solr.in.shbin\solr.in.cmd 以取得範例用法。使用值 * 將允許任何路徑,如同較早的版本。

    有關此方面的更多資訊,請參閱 Solr.xml 參數 章節。

    現在始終不允許使用 UNC 格式的 Windows SMB 共用,例如 \\myhost\myshare\mypath。請改用磁碟機代號掛載,例如 S:\mypath

  • 現在有一個新的授權外掛程式 ExternalRoleRuleBasedAuthorizationPlugin 可用。此外掛程式允許驗證外掛程式(例如 JWT)提供使用者的角色,而不是在 Solr 內維護使用者到角色的對應。

  • 啟用驗證後,Admin UI 儀表板(主螢幕)現在包含一個面板,顯示正在使用的驗證和授權外掛程式、已登入的使用者名稱,以及指派給此使用者的角色。左側導覽中也會出現一個新連結,允許使用者登出。

串流運算式

  • /export 處理程式現在支援串流表達式,以允許將匯出輸出限制為僅限符合的文件。

    有關如何使用此功能的更多資訊,請參閱 指定本機串流表達式 章節。

  • statsfacettimeseries 表達式現在支援百分位數和標準差聚合。

醒目顯示

對於 Unified Highlighter:設定 hl.fragsizeIsMinimum 現在預設為 false,因為發現 true 在突出顯示大量文字時會導致效能大幅下降。與 Solr 8.5 相比,這將產生平均較長的突出顯示,但與之前的版本相比相對不變。此外,如果您的應用程式突出顯示大量文字,您可能需要嘗試降低 hl.fragAlignRatio 以犧牲理想的片段對齊來換取更好的效能。

棄用

社群的主要重點是改善 Solr 的穩定性和支援性。隨著 8.4 版本中新增的套件管理系統,我們現在能夠將某些功能移至由第三方維護的外掛程式,這些第三方擁有適當開發和支援它們的專業知識。我們的目標是讓執行 Solr 更容易,且更不容易發生停機和其他麻煩。本著這種精神,以下功能已被棄用,並計畫在 Solr 9.0 中移除。

  • 跨資料中心複製 (CDCR) 目前的形式已棄用,並計畫在 9.0 中移除。此功能不太可能被相同的外掛程式取代。然而,社群正在努力找出用於災難復原和故障轉移的替代功能。

  • 資料匯入處理程式 (DIH) 已棄用,並計畫在 9.0 中移除。正在進行用社群支援的外掛程式取代 DIH 的工作,可能很快就會推出。

  • 在 HDFS 中儲存索引和備份的支援已棄用,並計畫在 9.0 中移除。此功能的社群支援版本可能會在未來作為外掛程式提供。有關更多詳細資訊,請參閱 SOLR-14021

鼓勵有興趣將功能維護為外掛程式的使用者加入 開發人員郵件清單,以了解更多關於如何提供協助的資訊。

Solr 8.5

請參閱 8.5 版本說明,以概覽 Solr 8.5 的主要新功能。

升級到 8.5.x 的使用者應注意 8.4 的下列主要變更。

注意:索引不相容警告已追溯新增至 8.4,適用於選擇非預設發佈格式(例如「FST50」)的使用者。

SolrCloud 升級的注意事項

Solr 8.5 變更了 Overseer 佇列和對應中元素使用的格式(請參閱 SOLR-14095 以取得有關變更的技術討論)。此佇列由 Overseer 內部使用,以可靠地處理操作、在 Overseer 和協調器節點之間傳達操作結果,並由 REQUESTSTATUS API 用於顯示有關非同步集合操作的資訊。

此變更不會要求您變更任何用戶端程式碼,您應該不會在用戶端看到任何差異。但是,根據您的升級策略,在升級現有的 SolrCloud 叢集時,確實需要一些注意。

如果您使用原子重新啟動策略升級 Solr

  • 如果您不使用非同步或 REQUESTSTATUS 操作,您應該可以重新啟動而不會看到任何問題。

  • 如果您確實使用集合 API 操作

    1. 暫停集合 API 操作。

    2. 如果您使用非同步操作,請清除佇列(請參閱 DELETESTATUS 章節以取得範例)。

    3. 升級並重新啟動節點。

    4. 恢復所有正常操作。

如果您使用滾動重新啟動策略升級 Solr

  • 如果您不使用集合 API 操作,您應該可以執行滾動重新啟動而不會看到任何問題。

  • 如果您確實使用集合 API 操作,但您可以在重新啟動期間暫停使用它們,最簡單的方法是

    1. 暫停集合 API 操作。

    2. 升級並重新啟動所有節點。

    3. 如果您使用非同步操作,請清除佇列(請參閱 DELETESTATUS 章節以取得範例)。

    4. 恢復所有正常操作。

如果您使用集合 API 操作且無法在升級期間暫停它們

  1. 使用系統屬性啟動 8.5 節點:-Dsolr.useUnsafeOverseerResponse=deserialization。請確保最後升級 Overseer 節點。

  2. 一旦所有節點都位於 8.5 中,且您不再需要讀取舊的狀態,請再次重新啟動並移除系統屬性。

如果您偏好保留舊的(但不安全的)序列化策略,您可以使用系統屬性:-Dsolr.useUnsafeOverseerResponse=true 啟動您的節點。請記住,這將在未來版本的 Solr 中移除。

安全性管理員

Solr 現在可以啟用 Java 安全性管理員來執行。若要啟用此功能,請在 solr.in.shsolr.in.cmd 中設定屬性 SOLR_SECURITY_MANAGER_ENABLED=true。請注意,如果您使用 HDFS 儲存索引,則無法啟用安全性管理員。

在 Solr 9.0 中,這將是預設值。

封鎖/允許特定 IP

Solr 有兩個新參數,可讓您使用 IP 位址限制對 Solr 的存取。使用 SOLR_IP_WHITELIST 設定允許清單,並使用 SOLR_IP_BLACKLIST 設定封鎖清單。這些屬性定義於 solr.in.shsolr.in.cmd 中。

另請參閱 啟用 IP 存取控制 章節。

BlockJoin Facet 棄用

BlockJoinFacetComponent 已標記為棄用,並將在 9.0 中移除。鼓勵使用者遷移至 JSON Facet API 中的 uniqueBlock()。有關此功能的更多資訊,請參閱 區塊聯結網域變更 章節。

使用布林查詢剖析器快取

預設情況下,布林查詢剖析器 會在 Solr 的 filterCache 中快取查詢。現在可以使用本機參數 cache=false 停用此功能。

索引記錄檔

Solr 現在包含一個命令列工具 bin/postlogs,它會將 Solr 的記錄檔編入集合索引。這提供了一個簡單的方法來使用 Solr 或視覺化工具(例如 Zeppelin)來排除系統問題。

請參閱 記錄分析 的文件以取得更多詳細資訊。

醒目顯示

Solr 的 Unified Highlighter 現在有兩個參數來協助控制段落大小:hl.fragAlignRatiohl.fragsizeIsMinimum。請參閱 Unified Highlighter 章節,以取得有關這些新參數的詳細資訊。無論設定為何,段落的大小都可能與之前不同。警告:對於使用預設句子斷點迭代器突出顯示大量文字的應用程式,發現這些預設設定會導致效能大幅下降。請參閱 8.6 升級注意事項,以取得您可以在 8.5 中應用的建議。

共用程式庫系統參數

Solr 的 solr.xml 檔案長期以來一直支援 sharedLib 參數,可讓您為所有核心定義 .jar 檔案的通用位置,這些檔案可能需要位於路徑中。

此屬性現在可以在 solr.in.shsolr.in.cmd 中定義為系統屬性 (-Dsolr.sharedLib=/path/to/lib),並新增至 SOLR_OPTS(請參閱 solr.in.shsolr.in.cmd 以取得詳細資訊)。

Solr 8.4

請參閱 8.4 版本說明,以概覽 Solr 8.4 的主要新功能。

升級到 8.4.x 的使用者應注意 8.3 的下列主要變更。

提醒:如果您在綱要中設定 postingsFormatdocValuesFormat 以使用非預設選項,您可能會在未來版本中阻止自己升級 Lucene/Solr 軟體。多個非預設發佈格式在 8.4 中變更,因此導致之前索引的索引資料失效。這包括因效能原因而由 Solr TaggerHandler 建議的「FST50」。現在有經過改進的文件,可協助您處理此權衡選擇。

套件管理系統

版本 8.4 為 Solr 引入了套件管理系統。此系統的目標是允許外掛程式的熱(即時)部署、為外掛程式提供封裝指南,並遵循其他套件管理系統中使用的熟悉概念來標準化 Solr 的方法。

此系統旨在最終取代使用 <lib ../> 指令、Blob Store 和其他將外掛程式和自訂組件部署到 Solr 的方法。

此系統目前被視為實驗性,因此請謹慎使用。必須在啟動時傳遞系統參數才能啟用它,然後才能使用。詳情請參閱套件管理章節。

透過此功能,Solr 的 Blob Store 功能現在已棄用,並可能在 9.0 版本中移除。

安全性

以下混合變更都是為了使 Solr 在開箱即用時更加安全而做的。

  • Solr 的 _default configset 中的 solrconfig.xml 檔案已刪減了以下先前預先設定的項目:

    • 所有 <lib …​/> 指令。這表示 Solr Cell(又稱 Tika)、Learning to Rank、叢集(使用 Carrot2)、語言識別和 Velocity(用於 /browse 範例搜尋介面)不再開箱即用。

    • /browse/tvrh/update/extract 請求處理程式。

    • Term Vector Component。

    • XSLT 和 Velocity 回應寫入器。

      所有這些項目都可以透過手動編輯 solrconfig.xml 以將它們重新加入您的 Solr 實作中,或使用 Config API 來加入。

      sample_techproducts_configs./example 中找到的範例保持不變。

  • 使用不安全的 Configset API 上傳的 Configset(即未啟用驗證時)被視為「不信任的 Configset」。

    為了加強 Solr 的開箱即用安全性,這些不信任的 configset 不再允許使用 <lib …​/> 指令來實作模組或自訂 Jar。

    當升級到 8.4 時,如果您正在使用包含 <lib ../> 指令的不信任 configset,則它們對應的集合將不會載入(它們將停止運作)。在這種情況下,您有幾個選項:

    • 您可以使用 驗證來保護您的 Solr 實例,然後重新上傳 configset(使用 bin/solr zk upconfig …​ Solr CLI 命令);

    • 您可以將自訂 Jar 放入 Solr 的 classpath 中,而不是 lib 目錄;

    • 您可以嘗試新的套件管理系統來管理您的自訂 Jar。

      有關信任與不信任的 configset 的更多詳細資訊,請參閱上傳 Configset章節。

  • 我們的預設 Jetty 設定已更新為現在預設設定內容安全策略 (CSP)。請參閱 ./server/etc/jetty.xml,了解有關如何設定它的詳細資訊。

    由於此變更,由 Solr 的 HTTP 伺服器提供的任何包含內嵌 JavaScript 的自訂 HTML 將不再在現代瀏覽器中執行。您的選項是:

    • 變更您的 JavaScript 程式碼,使其不再內嵌執行;

    • 編輯 jetty.xml 以移除 CSP(建立較弱的安全性保護);

    • 使用反向 Proxy 移除/變更標頭。

  • Solr 的 Blob Store 和執行時 lib 功能現在已棄用,並計劃在 9.0 版中從 Solr 中移除。它已由新的套件管理系統取代。

  • Velocity 回應寫入器現在也已棄用,並計劃在 9.0 版中從 Solr 中移除。

不允許將 Collapse 與 Group 一起使用

CollapsingQueryParser結果分組一起使用從未被支援,因為它會導致行為不一致和 NullPointerException 錯誤。我們現在已明確禁止這種組合以防止這些錯誤。如果您一起使用它們,則需要修改您的查詢。

SolrJ

  • SolrJ 現在支援單分片場景的 shards.preference 參數,以確保多分片和單分片請求路由以相同的方式運作。

    有關詳細資訊,請參閱 雲端請求路由shards.preference 參數

  • 為了支援結構化說明,QueryResponse.getExplainMap() 類型已從 Map<String, String> 變更為 Map<String, Object>

    預計此變更大部分是向後相容的。由於類型清除,編譯後的第三方組件將以相同的方式運作,但可能需要變更原始碼。

  • 複本路由程式碼已移至 SolrJ,如果需要,可讓用戶端使用這些類別。

串流運算式

  • 已新增新的 DBSCAN 叢集串流評估器。

  • precision 串流評估器現在可以在矩陣上運作。

  • random 串流運算式現在可以建立 x 軸。

JSON 分面

  • 已新增兩個新的彙總:missingcountvals

  • 多個彙總現在支援多值欄位:minmaxavgsumsumsqstddevvariancepercentile

快取

  • 在 8.3 中新增 CaffeineCache 之後,舊版 SolrCache 實作已棄用,並可能在 9.0 版本中移除。

    建議使用者盡快將其快取設定轉換為使用 org.apache.solr.search.CaffeineCache

Solr 8.3

有關 Solr 8.3 的主要新功能概述,請參閱 8.3 發行說明

升級到 8.3.x 時,使用者應注意 8.2 中的以下主要變更。

JWT 驗證

JWT 驗證現在支援多個身分提供者。為了允許這樣做,參數 jwkUrl 已棄用,並已取代為 jwksUrl。使用 jwkUrl 的實作將繼續正常運作,但使用者應計畫盡快將其設定轉換為使用 jwksUrl

快取

  • Solr 有一個新的快取實作 CaffeineCache,現在建議使用它而不是其他快取。預計此快取通常會為大多數使用者提供較低的記憶體佔用空間、較高的命中率和更好的多執行緒效能。

    由於快取會直接影響 Solr 實作的效能,因此在生產環境中切換到任何新的快取實作之前,請務必針對您的環境和流量模式進行測試,以便您充分了解變更的後果。

  • 一個新的參數 maxIdleTime 允許自動逐出在定義的時間內未使用過的快取項目。這允許快取釋放一些記憶體,並且應有助於那些想要或需要微調其快取的人。

有關這些和其他快取選項和參數的更多詳細資訊,請參閱快取和查詢預熱章節。

Solr 8.2

有關 Solr 8.2 的主要新功能概述,請參閱 8.2 發行說明

升級到 8.2.x 時,使用者應注意 v8.1 中的以下主要變更。

ZooKeeper 3.5.5

Solr 8.2 將 Solr 隨附的 ZooKeeper 版本更新至 v3.5.5。

建議將設定為與 Solr 一起運作的外部集合也更新至 ZooKeeper 3.5.5。

此 ZooKeeper 版本包含許多新的安全性功能。為了使 Solr 的管理 UI 能夠與 3.5.5 搭配運作,zoo.cfg 檔案必須允許存取 ZooKeeper 的「四字母命令」。至少必須啟用 ruokconfmntr,但如果選擇,也可以選擇啟用其他命令。有關詳細資訊,請參閱ZooKeeper 集合的設定章節。

直到 8.3,SOLR-13672 導致管理 UI 中的 ZK 狀態畫面無法報告狀態。這只會影響 UI,ZooKeeper 仍然可以正常運作。

路由別名

  • 路由別名現在使用集合屬性來識別屬於別名的集合;在 8.2 之前,這些別名使用核心屬性。

    這是向後相容的,使用先前版本建立的別名將繼續運作。但是,新的集合將不再將 routedAliasName 屬性新增至 core.properties 檔案,因此任何依賴此位置的外部程式碼都需要更新。

  • 時間路由別名現在在集合名稱中包含 TRA 字綴,格式為 <alias>_TRA_<timestamp>
    使用較舊版本建立的集合將繼續運作。

分散式追蹤支援

此版本新增了對追蹤 Solr 中請求的支援。請參閱分散式追蹤章節,了解如何設定此功能的詳細資訊。

Solr 8.1

有關 Solr 8.1 的主要新功能概述,請參閱 8.1 發行說明

升級到 8.1.x 時,使用者應注意 v8.0 中的以下主要變更。

全域 maxBooleanClauses 參數

  • maxBooleanClauses 參數的行為已變更,以減少處理病態查詢字串時查詢指數擴展的風險。

    現在,在節點層級強制執行 1024 個子句的預設上限。這是 7.0 之前的預設值,並且可以使用 solr.xml 中的新全域參數覆寫。無論是使用者(或用戶端)明確定義還是由 Solr 和 Lucene 內部建立的,此限制都將對所有查詢強制執行。

    solrconfig.xml 中有一個相同的參數可用於限制使用者(或用戶端)明確定義的查詢大小,但此每個集合限制仍然會受到 solr.xml 中設定的全域限制約束。

    如果您的使用案例需要在查詢中使用大量 OR 或 AND 子句,則在升級到 8.1 時,您可能需要調整全域 maxBooleanClauses 參數,因為在 7.0 和 8.1 之間,此限制實際上是無界的。

    有關新參數的更多資訊,請參閱maxBooleanClauses 章節。

安全性

  • 現在支援使用 JSON Web Tokens (JWT) 進行驗證。這些允許 Solr 聲明使用者已透過外部身分提供者(例如啟用 OpenID Connect 的 IdP)進行驗證。有關更多資訊,請參閱JWT 驗證外掛程式章節。

  • 已新增用於稽核記錄的新安全性外掛程式。預設類別 SolrLogAuditLoggerPlugin 可用,並且可在 security.json 中設定。如果需要,也可以擴充基底類別以新增自訂稽核外掛程式。有關更多資訊,請參閱稽核記錄章節。

集合 API

  • Collections API 中 REQUESTSTATUS 命令的輸出現在將在「成功」或「失敗」索引鍵中包含內部非同步請求(如果有的話)。

  • CREATE 命令現在將在命令失敗時傳回適當的狀態碼 (4xx、5xx 等)。先前,即使失敗,它也總是傳回 0

  • MODIFYCOLLECTION 命令現在接受屬性以將集合設定為唯讀。這可用於阻止集合接收任何更新,同時仍然允許提供查詢。有關如何使用它的詳細資訊,請參閱MODIFYCOLLECTION 章節。

  • 新增的 RENAME 指令允許透過使用新名稱設定一對一的別名來重新命名集合。更多資訊請參閱RENAME章節。

  • 新增的 REINDEXCOLLECTION 指令允許將來源集合中已儲存的欄位索引到新的集合。更多資訊請參閱REINDEXCOLLECTION章節。

記錄

  • 預設的 Log4j2 記錄模式已從同步變更為非同步。這將改善記錄吞吐量並減少系統競爭,但代價是輕微的機率在 Solr 異常終止時可能會遺失一些記錄訊息。

    如果即使是這種輕微的風險也無法接受,可以在 server/resources/log4j2.xml 中找到的 Log4j 設定檔中,在註解區段中找到同步記錄配置,並可編輯以重新啟用同步記錄。

指標

  • SolrGangliaReporter 已從 Solr 中移除。Solr 使用的指標函式庫 Dropwizard Metrics 已更新至 4 版本,並且由於依賴 LGPL 許可證,因此已從中移除 Ganglia 支援。

瀏覽 UI (Velocity)

預設垃圾收集器 (GC)

  • Solr 的預設 GC 已從 CMS 變更為 G1。如果您偏好使用 CMS 或任何其他 GC 方法,您可以修改 solr.in.sh (*nix) 或 solr.in.cmd (Windows) 的 GC_TUNE 區段。