在 SharePoint Server 中管理索引元件

 

**適用版本:**SharePoint Server 2013, SharePoint Server 2016

**上次修改主題的時間:**2017-09-08

**摘要:**了解如何及何時使用 Windows PowerShell,藉由新增索引元件以建立其他的索引複本或索引分割區,在 SharePoint Server 中擴充搜尋索引。

本文中的程序和範例假設已安裝 SharePoint Server 和 Search Service 應用程式,並具有現有的搜尋拓撲,同時 SharePoint Server 搜尋索引中也有項目。如果 SharePoint Server 和 Search Service 應用程式是新安裝的,且 SharePoint Server 搜尋索引中沒有內容,請依照<變更 SharePoint Server 中的預設搜尋拓撲>中所述的程序來擴充搜尋拓撲。

本文中的程序適用於索引元件。如需如何管理分析處理元件、內容處理元件、編目元件、搜尋管理元件和查詢處理元件的資訊,請參閱<在 SharePoint Server 中管理搜尋元件>。

使用索引元件 PowerShell Cmdlet (New-SPEnterpriseSearchIndexComponent) 可同時管理索引分割區和索引複本。搜尋拓撲中每個索引元件都代表一個索引複本。

您可將搜尋索引分割成不連續的部分,即稱為索引分割區。每個索引分割區會在本機磁碟上儲存為一組檔案。如果要擴充搜尋索引,可以新增索引分割區。

如果要讓 SharePoint Server 搜尋索引具備容錯的功能,您可以將現有索引分割區的索引複本新增至搜尋拓撲。每個索引複本均包含相同的資訊。

本文內容:

  • 開始之前

  • 新增索引複本至現有的索引分割區

  • 新增索引分割區

  • 取消重新分割程序

  • 移除索引元件

  • 移動索引元件

開始之前

開始之前,請先檢閱下列必要條件。

  • 已安裝 SharePoint Server,並已建立具備搜尋拓撲的 Search Service 應用程式。

  • 正在執行本文中程序的使用者帳戶是伺服器陣列管理員群組的成員。

  • 您已規劃目標搜尋拓樸,並已規劃要裝載索引分割區和索引複本的伺服器。

  • SharePoint Server 已安裝在您希望用於主控索引元件的所有伺服器上。您可以在現有部署中建立新的應用程式伺服器或定義應用程式伺服器。這些伺服器已新增至伺服器陣列,而您是所有這些伺服器的管理員。

新增索引複本至現有的索引分割區

新增索引複本至搜尋拓撲可讓現有的索引分割區具備容錯的功能。將索引複本放置在個別伺服器上的個別失敗網域中。當您新增索引複本時,會將新的索引元件新增至搜尋拓撲,並與您想要製作複本的索引分割區建立關聯。

重要

此程序使用 Microsoft PowerShell。您可以在伺服器陣列中的任何伺服器上執行 Microsoft PowerShell 命令。然而,在此程序中,您應該對所有的 Microsoft PowerShell 命令使用相同的 SharePoint 管理命令介面,才能夠在命令之間共用 Microsoft PowerShell 物件參照。

新增索引複本

  1. 確認執行此程序的使用者帳戶為伺服器陣列管理員群組的成員。

  2. 在伺服器陣列中的其一伺服器上啟動 SharePoint 管理命令介面。

  3. 在您希望建立索引複本的伺服器上啟動 Search Service 執行個體,並建立 Search Service 執行個體識別碼的參照。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    $<host n> = Get-SPEnterpriseSearchServiceInstance -Identity "<Server name>"
    Start-SPEnterpriseSearchServiceInstance -Identity $<host n>
    

    其中:

    • $<主機 n> 指定 Search Service 執行個體的 PowerShell 物件參照。

    • <伺服器名稱> 指定您要新增索引元件的伺服器。輸入必須是 12345678-90ab-cdef-1234-567890bcdefgh 格式的有效 GUID;有效的伺服器名稱 (例如 myserver1);或有效 SearchServiceInstance 物件的執行個體。

    例如:

    $hostA = Get-SPEnterpriseSearchServiceInstance -Identity "myserver1"
    Start-SPEnterpriseSearchServiceInstance -Identity $hostA
    
  4. 請稍候,直到 Search Service 執行個體已在執行中。在 Microsoft PowerShell 命令提示字元處輸入下列命令,直到該命令傳回連線狀態:

    Get-SPEnterpriseSearchServiceInstance -Identity $<host n>
    
  5. 複製使用中的搜尋拓撲。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    $ssa = Get-SPEnterpriseSearchServiceApplication
    $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active
    $clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone -SearchTopology $active
    
  6. 新增索引元件並與分割區建立關聯。在 Windows PowerShell 命令提示字元處,輸入下列命令:

    New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance <host n> -IndexPartition <Index partition number>
    

    其中:

    • $clone 是要變更的複製拓撲。

    • $<主機 n> 是正在您希望新增索引複本的伺服器上執行的 Search Service 執行個體的 PowerShell 物件參照。

    • <索引分割編號> 是您正在建立複本的現有索引分割區的數目。例如,如果要建立索引分割區 0 的索引複本,請選擇 "0" 作為參數值。

    例如:

    New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostA -IndexPartition 0
    
  7. 啟用複製拓撲。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    Set-SPEnterpriseSearchTopology -Identity $clone
    
  8. 確認已啟用新的拓撲,並已新增代表新索引複本的索引元件。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    Get-SPEnterpriseSearchTopology -Active -SearchApplication $ssa
    
  9. 監視現有索引散佈至新複本的情況。在散佈完成前,新增的索引複本將處於降級狀態。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Text
    

    重複此命令直到所有搜尋元件 (包括新的索引元件) 輸出使用中狀態為止。若是大型的搜尋索引,這項作業可能需要數小時才能完成。

新增索引分割區

當您新增索引分割區時,必須重新分割搜尋索引。這項重新分割作業可能需要數小時才能完成,視搜尋索引的大小而定。

若要新增索引分割區及重新分割搜尋索引,請將新的索引元件新增至搜尋拓撲,並建立此索引元件與新的索引分割區號碼的關聯。新增索引分割區和重新分割搜尋索引應該以不同的處理程序另行初始化,且不得在您對搜尋拓撲做其他變更時進行初始化。

您必須新增與您現有的分割區數目相同的索引複本至新的索引分割區。

在新增索引分割區至搜尋拓撲並開始重新分割搜尋索引之前:

  • 備份 Search Service 應用程式和現有的搜尋索引。請參閱<在 SharePoint Server 中備份 Search Service 應用程式>。

  • 確認目前使用中的拓撲狀況良好。在管理中心中的 [搜尋管理] 頁面檢視搜尋拓撲的狀態,或執行 Microsoft PowerShell Cmdlet Get-SPEnterpriseSearchStatus

  • 確定在您要新增索引分割區的伺服器上,有足夠的磁碟空間可用。

警告

Search Service 應用程式在索引重新分割期間會暫停,且無法對內容進行編目或編製索引。此外,使用者也將無法執行查詢。

新增索引分割區

  1. 確認執行此程序的使用者帳戶為伺服器陣列管理員群組的成員。

  2. 在伺服器陣列中的其一伺服器上啟動 SharePoint 管理命令介面。

  3. 在您希望為新的索引分割區新增索引複本的所有伺服器上啟動 Search Service 執行個體,並建立程序中稍後要使用的 Search Service 執行個體的 PowerShell 物件參照。針對每部伺服器,在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    $<host n> = Get-SPEnterpriseSearchServiceInstance -Identity "<Server name>"
    Start-SPEnterpriseSearchServiceInstance -Identity $<host n>
    

    其中:

    • <主機 n> 指定 Search Service 執行個體的 PowerShell 物件參照。

    • <伺服器名稱> 指定您要新增索引元件的伺服器。輸入必須是 12345678-90ab-cdef-1234-567890bcdefgh 格式的有效 GUID;有效的伺服器名稱 (例如 myserver1);或有效 SearchServiceInstance 物件的執行個體。

    例如:

    $hostC = Get-SPEnterpriseSearchServiceInstance -Identity "myserver3"
    Start-SPEnterpriseSearchServiceInstance -Identity $hostC
    $hostD = Get-SPEnterpriseSearchServiceInstance -Identity "myserver4"
    Start-SPEnterpriseSearchServiceInstance -Identity $hostD
    
  4. 請稍候,直到 Search Service 執行個體均在執行中。針對每部伺服器,在 Microsoft PowerShell 命令提示字元處輸入下列命令,直到該命令傳回連線狀態:

    Get-SPEnterpriseSearchServiceInstance -Identity $<host n>
    
  5. 複製使用中的搜尋拓撲。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    $ssa = Get-SPEnterpriseSearchServiceApplication
    $active = Get-SPEnterpriseSearchTopology -SearchApplication $ssa -Active
    $clone = New-SPEnterpriseSearchTopology -SearchApplication $ssa -Clone -SearchTopology $active
    

    此命令會建立可使用 $clone 參照的複製搜尋拓撲,並傳回複製拓撲的相關資訊。記下複製拓撲的拓撲識別碼,以供您在必須取消重新分割程序時使用。

  6. 新增一個或多個索引元件並建立與新索引分割區的關聯,以新增索引分割區。建議您為新的索引分割區建立與您現有的分割區數目相同的索引複本。針對每個新的索引元件,在 Windows PowerShell 命令提示字元處,輸入下列命令:

    New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance <host n> -IndexPartition <Index partition number>
    

    其中:

    • $clone 是要變更的複製拓撲。

    • $<主機 n> 指定 Search Service 執行個體的 PowerShell 物件參照。

    • <索引分割編號> 是您正在建立的索引分割區的數目。依預設,您有一個稱為索引分割區 0 的索引分割區。如果您想要建立新的索引分割區,請輸入 IndexPartition 參數值 1,接著是 2,然後是 3,依此類推。

    例如,如果您現有的索引分割區 0 在主機 A 和主機 B 上有索引複本,而您想要新增在主機 C 和主機 D 上有索引複本的索引分割區:

    New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostC -IndexPartition 1
    New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $hostD -IndexPartition 1
    
  7. 請確認 Search Service 應用程式正在執行。在 Microsoft PowerShell 命令提示字元處,輸入下列命令:

    $ssa.IsPaused() -ne 0
    
    1. 若此命令傳回 False,則 Search Service 應用程式正在執行。請繼續前往步驟 9。

    2. 若此命令傳回 True,則 Search Service 應用程式已暫停。請繼續前往步驟 8。

  8. 如果 Search Service 應用程式已暫停,請了解原因並探究是否必須先等待任何作業完成,再繼續前往步驟 9。如需詳細資訊,請參閱在 SharePoint Server 中管理已暫停的 Search Service 應用程式

  9. 開始啟用複製的拓撲。這將會開始啟用包含與新索引分割區有關聯的新索引複本的拓撲,並且啟動索引重新分割程序。

    重要

    Search Service 應用程式在索引重新分割期間會暫停,且無法對內容進行編目或編製索引。此外,使用者也將無法執行查詢。您將無法存取執行啟用命令的 Windows PowerShell 主控台。

    注意

    管理中心的 [搜尋管理] 頁面不會顯示,因為 Search Service 應用程式已由於索引重新分割而暫停。然而,由於當您為了重新分割而暫停 Search Service 應用程式時,所有的查詢處理元件都會暫停,因此 [搜尋管理] 頁面會顯示此程序進行期間查詢處理元件的錯誤。

    在 Windows PowerShell 命令提示字元處,輸入下列命令:

    $ssa.PauseForIndexRepartitioning()
    Set-SPEnterpriseSearchTopology -Identity $clone
    
  10. 監視索引重新分割程序的進度。您只能監視現有拓撲的主要索引元件的重新分割程序進度。下列步驟顯示如何找出主要索引元件。

    注意

    您將無法在現有的 SharePoint 管理命令介面中執行任何命令,直到拓撲啟用 (包括索引重新分割程序) 完成為止。請在第二個 SharePoint 管理命令介面中執行下列命令。

    1. 啟動第二個 SharePoint 管理命令介面。

    2. 尋找每個現有索引分割區的主要索引複本。在第二個 SharePoint 管理命令介面的 Windows PowerShell 命令提示字元處,輸入下列命令:

      $ssa = Get-SPEnterpriseSearchServiceApplication
      Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Text
      

      該命令會傳回索引元件與其屬性的清單。請記下主要索引元件的名稱。這些是屬性為 Primary: True 的索引元件。

      例如,輸出可能類似這樣。在此範例中,IndexComponent2 是主要索引元件:

      Name      : IndexComponent1
      State     : Active
      Primary   : False
      Partition : 0
      Host      : MyMachine1
      
      Name      : Cell:IndexComponent1-SPd32cdffb08a2I.0.0
      State     : Active
      Primary   : False
      Partition : 0
      
      Name      : IndexComponent2
      State     : Active
      Primary   : True
      Partition : 0
      Host      : MyMachine2
      
      Name      : Cell:IndexComponent2-SPd32cdffb08a2I.1.0
      State     : Active
      Primary   : True
      Partition : 0
      
  11. 針對每個主要索引元件,監視索引重新分割程序。在第二個 SharePoint 管理命令介面的 Windows PowerShell 命令提示字元處,輸入下列命令:

    Get-SPEnterpriseSearchStatus -SearchApplication $ssa -Healthreport -Component <Index component name> | ? { ($_.name -match "repart") -or ( $_.name -match "splitting") } | ft -AutoSize Name, Message
    

    其中:

    • <索引元件名稱> 是您想要監視進度的主要索引元件名稱,例如 IndexComponent2

    監視每個主要索引元件的命令輸出。該命令的輸出包含重新分割索引的相關進度資訊。

    在索引重新分割程序的初始階段,輸出可能類似如下:

    Name                                              Message
    ----                                              -------
    repartition_component_state[SP...]                Pending
    

    在索引重新分割程序的主要階段,會對索引分割區進行分割。在這個階段,輸出可能類似如下:

    Name                                              Message
    ----                                              -------
    index splitting: current fusion progress[SP...]   <Percentage value>
    index splitting: splitting state [SP...]          Index splitter running fusion, building: <Folder>
    repartition_component_state [SP...]               Splitting
    

    輸出中的百分比值表示重新分割程序的概略進度。

    針對所有的主要索引元件重複此命令,直到命令的輸出不再傳回任何值為止。這表示索引重新分割程序已完成,而且重新分割的索引現在會在伺服器上進行複製及散佈。這項作業可能需要數小時才能完成。

  12. 監視索引散佈至新索引複本的進度。若要執行這項操作,請確認已啟用新的拓撲,且所有搜尋元件的狀況良好。在第二個 SharePoint 管理命令介面的 Windows PowerShell 命令提示字元處,輸入下列命令:

    Get-SPEnterpriseSearchStatus -SearchApplication $ssa | ft -AutoSize Name, State, Details
    

    在索引散佈至新索引複本期間,新增的索引複本會傳回降級狀態。當所有索引元件在輸出中傳回使用中狀態時,散佈即完成。這項作業可能需要數小時才能完成。

    注意

    由於您已為了索引重新分割而暫停 Search Service 應用程式,因此查詢處理元件也會暫停。在輸出中,所列出的查詢處理元件將處於不明狀態。

  13. 在您用於啟動拓撲啟用程序的 SharePoint 管理命令介面中,確認搜尋拓撲啟用命令已完成。

  14. (選用) 在重新分割之前,先重新啟動代管索引元件 (代表主要索引複本或任何其他索引複本) 的所有伺服器提供的 SharePoint 搜尋主機控制器服務。

    執行此步驟,以便在重新分割搜尋索引後取得正確的文件數並釋出記憶體。若決定不執行此步驟,經過數日和重複索引之後,記憶體使用量也會逐漸減少,文件數 (由 PowerShell Cmdlet 傳回且位於管理中心的 [搜尋管理] 頁面) 將會是正確的。

    注意

    為避免查詢中斷,在您重新啟動 SharePoint 搜尋主機控制器服務之前,請先確定針對每個索引分割區,至少有一個索引元件傳回執行中狀態。

    重要

    請勿在 SharePoint Server 管理中心網站上使用 [伺服器上的服務] 頁面重新啟動此服務。

    1. 如果要重新啟動 SharePoint 搜尋主機控制器,在每部主控現有索引分割區之索引元件的伺服器上,開啟命令提示字元視窗。

      1. 若要停止 SharePoint 搜尋主機控制器,輸入此命令:net stop spsearchhostcontroller

      2. 如果要重新啟動 SharePoint 搜尋主機控制器,輸入此命令:net start spsearchhostcontroller

  15. 繼續執行 Search Service 應用程式。在 Windows PowerShell 命令提示字元處,輸入下列命令:

    $ssa.ResumeAfterIndexRepartitioning()
    

取消重新分割程序

若您因故必須取消正在進行中的重新分割程序,請使用下列程序。

取消重新分割程序

  1. 在您執行拓撲啟用命令的伺服器上,啟動新的 SharePoint 管理命令介面。

  2. 擷取啟用的拓撲識別碼。在 Windows PowerShell 命令提示字元處,輸入下列命令:

    $activating = Get-SPEnterpriseSearchTopology -Identity <Id of the activating topology> -SearchApplication $ssa
    

    其中:

    • <啟用的拓撲識別碼> 是您在複製搜尋拓撲時寫下的複製拓撲的身分識別 (GUID)。
  3. 取消拓撲啟用。在 Windows PowerShell 命令提示字元處,輸入下列命令:

    $activating.CancelTopologyActivation()
    

移除索引元件

如果索引分割區有多個使用中索引複本,您可以執行<在 SharePoint Server 中管理搜尋元件>一文中的<移除搜尋元件>程序來移除索引複本。

您不可使用此程序來移除索引分割區的最後一個索引複本。如果必須從搜尋拓撲中移除所有的索引複本,您必須移除後再重新建立 Search Service 應用程式,然後建立索引分割區數目減少的全新搜尋拓撲。

移動索引元件

如果要將索引複本從一部伺服器移動到另一部伺服器,建議您先新增索引元件至搜尋拓撲,然後再移除舊的索引元件。

移動索引元件

  1. 新增索引元件至您想要移動索引複本的目的地伺服器。接著複製搜尋拓撲,並新增索引複本,然後等到索引複製到新的索引複本中後,再啟用搜尋拓撲。請參閱<新增索引複本至現有索引分割區>。

  2. 請稍候,直到備妥新的索引複本可供查詢之用。在管理中心的 [搜尋管理] 頁面或執行 Windows PowerShell Cmdlet Get-SPEnterpriseSearchStatus,皆可檢視搜尋拓撲的狀態。在繼續前,您所新增的索引複本必須為使用中

  3. 再次複製搜尋拓撲。

  4. 移除索引元件以移除多餘的索引複本。請參閱<在 SharePoint Server 中管理搜尋元件>一文中的移除搜尋元件程序。

  5. 再次啟用搜尋拓撲。

如此可在您移動索引複本時,確保搜尋索引的容錯功能。