Creare un connettore di indicizzazione custom in SharePoint 2016

Creare e configurare un motore di ricerca non sempre è un’attività semplice. Le personalizzazioni richieste spesso sono le più disparate e complicano attività già complesse in origine. L’utilizzo di SharePoint è un buon punto di partenza soprattutto se si indicizzano documenti gestibili con la suite office. Ma cosa fare se è necessario indicizzare e ricercare il contenuto di file diversi come, ad esempio, un xml?

In questo articolo utilizzeremo un approccio basato su una soluzione custom supportata da Microsoft, già proposta per SharePoint 2013 qui e riproposta per SharePoint 2016.

Prerequisiti:

  • Windows Server 2012 R2
  • SharePoint Server 2016

SharePoint Farm

La farm utilizzata nell’articolo è composta da un singolo nodo con ruolo “Application with Search” ed una Search Service Application con configurazioni di default.

Figura 1: SharePoint Server Farm – Panoramica

Search Service Application

Creiamo una nuova Search Service Application.

Nella Central Administration Console clicchiamo su Application Management -> Manage Service Applications.

Figura 2: SharePoint Central Administration Console – Manage Service Applications

Clicchiamo su New -> Search Service Application.

Inseriamo un nome, nel mio caso utilizzo “SSA”.

Figura 3: SharePoint Central Administration Console – Creazione Search Service Application

Configuriamo i nuovi application pool

Figura 4: SharePoint Central Administration Console – Creazione Search Service Application

E clicchiamo su OK per confermare.

Al termine delle configurazioni, confermiamo cliccando nuovamente OK

Figura 5: SharePoint Central Administration Console – Search Service Application create correttamente

Apriamo la console della Search per verificare che tutto sia stato configurato correttamente.

Figura 6: SharePoint Search Administration Console – Panoramica

Effettuiamo il download della solution XmlFileConnector.

Questa è stata già ricompilata per SharePoint 2016.

Creiamo una nuova directory C:\Temp nella quale copieremo il contenuto del pacchetto appena scaricato.

Figura 7: File System – Directory di appoggio “Temp”

Apriamo notepad e creiamo un nuovo file chiamato xmldoc.reg il cui contenuto sarà:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\16.0\Search\Setup\ProtocolHandlers]

"xmldoc"="OSearch16.ConnectorProtocolHandler.1"

Lanciamo la SharePoint Management Shell con privilegi elevati ed eseguiamo i seguenti comandi:

Set-location “C:\Temp\XmlFileConnector\bin\Debug\”

[System.Reflection.Assembly]::Load(“System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”)

$publish New-Object System.EnterpriseServices.Internal.Publish

$publish.GacInstall(“C:\Temp\XmlFileConnector\bin\Debug\XmlFileConnector.dll”)

Figura 8: SharePoint Management Shell – Output configurazione dll

Eseguiamo il file xmldoc.reg. In questo modo modificheremo il registro di sistema per accettare in nuovo handler.

Figura 9: Windows popup – Modifica registro di sistema

Eseguiamo i seguenti comandi per riconfigurare la Search Service Application inserendo l’hostname del server che si sta utilizzando, nel mio caso “ssa”:

$SPApplSrv01 Get-SPEnterpriseSearchServiceInstance -Identity “svilsearch01”

$ssa Get-SPEnterpriseSearchServiceApplication

$newTopology New-SPEnterpriseSearchTopology -SearchApplication $ssa

New-SPEnterpriseSearchAdminComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01

New-SPEnterpriseSearchCrawlComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01

New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01

New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01

New-SPEnterpriseSearchIndexComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01 -IndexPartition 0

New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $newTopology -SearchServiceInstance $SPApplSrv01

#Activate the Topology

Set-SPEnterpriseSearchTopology -Identity $newTopology

$searchapp Get-SPEnterpriseSearchServiceApplication -Identity “ssa”

New-SPEnterpriseSearchCrawlCustomConnector -SearchApplication $searchapp –Protocol xmldoc -Name xmldoc –ModelFilePath “C:\Temp\XmlFileConnector\Model.xml”

Se tutto è andato bene, il risultato sarà il seguente:

Figura 10: SharePoint Management Shell – Output configurazione connettore xmldoc

Riavviamo la Search Service Application con i comandi:

net stop osearch16

net start osearch16

Figura 11: SharePoint Management Shell – Restart servizio search

Per abilitare la search all’utilizzo del nuovo connettore, eseguiamo:

$searchapp Get-SPEnterpriseSearchServiceApplication -Identity “SSA”

New-SPEnterpriseSearchMetadataCategory -Name “xmldoc” -Propset “BCC9619B-BFBD-4BD6-8E51-466F9241A27A” -searchApplication $searchapp

$c Get-SPEnterpriseSearchMetadataCategory -SearchApplication $searchapp -Identity “xmldoc”

$c.DiscoverNewProperties = $true

$c.Update()

A questo punto ci serve una share di rete dove far risiedere il nostro file xml:

Figura 12: Windows – Share condivisa

Utilizzando le configurazioni di base, si ottiene un risultato soddisfacente in ambiente di test:

Figura 13: Windows – Configurazioni share condivisa

L’xml che utilizzeremo è il seguente:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<Products>
<Product>
<ID>C234</ID>
<Title>Contoso series2</Title>
<ItemCategoryText>Cameras</ItemCategoryText>
<Url>http://contoso/sites/pub1/Pages/DetailsPage.aspx?id=C234</Url>
<Category>Cameras/SLR</Category>
<Price>799</Price>
<Description>This camera is making great pictures. Easy to use to an affordable price. </Description>
</Product>
<Product>
<ID>C235</ID>
<Title>Contoso Camera</Title>
<ItemCategoryText>Cameras</ItemCategoryText>
<Url>http://contoso/sites/pub1/Pages/DetailsPage.aspx?id=C235</Url>
<Category>Cameras/compact</Category>
<Price>350</Price>
<Description>This camera is making great pictures. Easy to use to an affordable price. </Description>
</Product>
</Products>

A questo punto non ci resta che creare un nuovo Content Source, definire una share dove risiederanno i nostro file .xml ed effettuare la prima full crawl.

Dalla Central Administration Console, clicchiamo su Manage Service Application -> SSA -> Content Sources.

Figura 14: SharePoint Search Administration Console – Manage Content Sources

Clicchiamo su New Content Source.

A questo punto è possibile specificare il nuovo Content Source Type: Cliccando su Custom Repository è possibile selezionare xmldoc.

Figura 15: SharePoint Search Administration Console – Creazione nuovo content source

Immaginando di dover indicizzare i nodi Product per ID, Title e Url utilizziamo la seguente sintassi come “Start Addresses” (attenzione alle maiuscole!):

xmldoc://svilsearch01/xml/#x=Product:ID;;Titleeml:Title;;Urleml:Url#

Figura 16: SharePoint Search Administration Console – Creazione nuovo content source

Confermiamo la configurazione cliccando su OK.

Figura 17: SharePoint Search Administration Console – Manage content sources

A questo punto non ci resta che eseguire un Full Crawl ed attendere il termine dell’operazione:

Figura 18: SharePoint Search Administration Console – Full Crawl

Terminato il crawl è necessario verificare se tutto è andato per il verso giusto.

Figura 19: SharePoint Search Administration Console – Termine Full Crawl

Cliccando su Crawl Log è possibile verificare che l’unico xml (per il momento) inserito nella share è stato indicizzato con successo:

Figura 20: SharePoint Search Administration Console – Crawl log

Site Collection

Per avere un riscontro pratico su quanto accaduto, creiamo una nuova Site Collection cliccando, nella HomePage della Central Administration, su Application Management -> Site Collection –> Create site collections.

Configuriamo titolo e template:

Figura 21: SharePoint Central Administration Console – Creazione Site Collection

Figura 22: SharePoint Central Administration Console – Creazione Site Collection

Clicchiamo su OK per confermare.

Terminata l’operazione riceveremo un messaggio informativo:

Figura 23: SharePoint Central Administration Console – Creazione Site Collection

Clicchiamo sulla URL http://svilsearch01/ per accedere al nsite:

Figura 24: SharePoint Site Collection – Homepage site Search

Provando a cercare, ad esempio, la stringa “C234”, ossia l’ID dell’elemento del primo nodo del nostro xml, otterremo il seguente risultato:

Figura 25: SharePoint Site Collection – Search

Nel prossimo articolo

Questa soluzione affronta solo uno dei possibili approcci per una differente configurazione della ricerca. Nel prossimo articolo analizzeremo altre soluzioni per una completa personalizzazione in grado di soddisfare anche i clienti più esigenti.