Exchange 2007 : Indexation et recherche dans les mailboxes

Le moteur de recherche d'Exchange 2007 a été nettement amélioré par rapport aux moteurs d'indexation/recherches qui étaient disponibles dans Exchange 2000/2003. La nouvelle version est moins gourmande en ressources, plus rapide, effectue des recherches à l'intérieur des pièces jointes, et il est active dès l’installation.

Activer/désactiver "search"

Pour activer ou désactiver la recherche Exchange, ouvrez Exchange Management Shell

Exécutez la commande suivante pour voir si la recherche est activé sur une boîte aux lettres spécifique:

 Test-ExchangeSearch <mailbox name>

ou créer une liste des mailboxes par base de données où la fonction est activée:

 Get-MailBoxDatabase | select name, indexenabled

Pour activer la fonction:

 Set-MailboxDatabase <name> -indexenabled:$true

Pour la désactiver:

 Set-MailboxDatabase <name> -indexenabled:$false

Pour désactiver la fonction completement sur le serveur, il suffit de stopper le service d'Indexation:

 net stop "Microsoft Exchange Search Indexer"

Gardez à l'esprit que si vous exécutez Outlook 2007 en mode "cached", la recherche "Exchange" n'est pas disponible. La recherche est traitée par le service local du PC client. Dans Outlook 2003, le logiciel effectue une analyse linéaire de chaque message (un par un).

Tester la fonctionnalité "Search"

Il existe une commande powershell qui vous permet de tester si la recherche / indexation fonctionne comme prévu. Par défaut, le délai d'attente de réponse est réglé sur 60 secondes, mais en réalité, vous devriez obtenir des résultats en moins de 10 secondes. (de sorte que vous pouvez éventuellement accélérer le test en fixant un délai de réponse de 20 secondes ou plus, ce qui vous permettra de tester une plus grande part de boîtes aux lettres à l'aide d'un script, en moins de temps.
Utilisez la commande suivante pour exécuter un test sur toutes les boîtes aux lettres sur votre serveur:

 Get-mailbox | Test-ExchangeSearch –IndexingTimeout 20 | Format-table

Vous allez voir dans votre fenêtre powershell une bar de progression de la fonction de test: "TestSearch"

Lorsque "ResultFound" réponds "Faux" et le champ "SearchTime" donne un résultat de "-1", alors la recherche ne fonctionne pas pour cette boîte aux lettres.

  Faites attention aux éventuelles erreurs (autres) lors de l'exécution de cette commande. Elles devraient vous donner des informations plus précises quand a la(les) raison(s) pour laquelle(lesquelles) la recherche ne fonctionne pas pour une boîte aux lettres donnée.

Si vous avez des bases de données multiples, vous pouvez utiliser le script suivant pour limiter le critère à seulement une base de données qui vous intéresse:

Get-Mailboxdatabase "Server\Database" | Get-mailbox | Test-ExchangeSearch –IndexingTimeout 20 | Format-table

Que faire si "Search" ne fonctionne pas ?

Outlook Web Access : Si vous recevez un message qui dit: "results will take a long time to appear because Microsoft Exchange Search is unavailable. Results will not include matches in the e-mail body", dans ce cas, il se peut que vous ayez un indexe corrompu.
Parfois, quand vous migrez (ou créez) des mailboxes, les premiers résultats de l'indexations sont fait "dans le vide" ou sur une partie non encore initialisée, ce qui produit un indexe corrompu.
Utilisez la commande PowerShell pour exécuter un test de recherche sur chaque boîte aux lettres (comme expliqué plus haut dans ce post). Regardez la colonne "ResultFound" et le "SearchTime". Vous devriez voir un problème pour l'utilisateur qui a signalé le problème.

Les index de recherche ne sont (heureusement) pas stockées dans les bases de données Exchange. Les données d'indexation sur une base de données spécifique sont stockées dans un répertoire sur le même emplacement que les fichiers de base de données.
Le nom du répertoire suit la convention CatalogData-<guid>-<guid>, où le <guid> premier est le GUID de la base de données et le second représente le <guid> d'instance, instance qui est utilisée dans les scénarios de cluster exchange de marquer une distinction entre les nœuds . Ce qui suit est un exemple de nom de dossier:

 CatalogData-b56624f3-bf19-4463-926f-d4705ac3dd08-cc64dd2d-2428-4f12-bba2-79d6d34c4d27

Le chemin typique (ou par défaut) pour les fichiers  ".edb" et les fichiers du répertoire CatalogData est: C:\Program Files\Microsoft\Exchange Server\ Mailbox\First Storage Group\

L'index de recherche peut être non synchronisé avec la base de données après une reprise de crash ou de démontage forcé de la base de données (en cas de dépassement de taille de base de données par exemple), et que les fichiers de transaction (transaction logs) sont ré-appliqué sur la base de données. Le moteur de recherche Exchange ne lit pas les fichiers journaux joué pour l'indexation.
J'ai aussi vu des cas où l'indice a été corrompu pendant ou après le déplacement de la boîte aux lettres à partir d'un serveur 2003 vers un serveur 2007. Dans ces situations, vous devez reconstruire le catalogue d'index de recherche.

Vous pouvez procéder comme ceci pour reconstruire un catalogue d'indexe.

  • Arretez le service "Microsoft Exchange Search indexer"
  • Détruisez le catalogue en cause (n'hésitez pas a utiliser la commande powershell pour confirmer le nom du catalogue "GetSearchIndexForDatabase –all")
  • Relacer le service "Microsoft Exchange Search indexer.

Il existe aussi une procédure powershell qui effectue les même action pour vous:

ResetSearchIndex.ps1 [-force] databasename
ResetSearchIndex -Force -All (si vous désirez effectuer l'opperation sur TOUTES vos base de données)
[PS] C:\>ResetSearchIndex.ps1 "Mailbox Database"

WARNING: Waiting for service ‘Microsoft Exchange Search Indexer (MSExchangeSearch)’ to finish stopping…
WARNING: Waiting for service ‘Microsoft Exchange Search Indexer (MSExchangeSearch)’ to finish stopping…
WARNING: Waiting for service ‘Microsoft Exchange Search Indexer (MSExchangeSearch)’ to finish stopping…
MSExchangeSearch service stopped
removing: D:\Exchange Server\Mailbox\First Storage Group\CatalogData-fb802b8a-fd2a-4da2-9dc5-7dc41c398409-cc64dd2d-2428-4f12-bba2-79d6d34c4d27

Confirm
Are you sure you want to perform this action?
Performing operation "Remove Directory" on Target "D:\Exchange Server\Mailbox\First Storage Group\CatalogData-fb802b8a-fd2a-4da2-9dc5-7dc41c398409-cc64dd2d-2428-4f12-bba2-79d6d34c4d27".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):A

MSExchangeSearch service Started

Note : vous pouvez utilisez le paramètre -all de la commande  ResetSearchIndex.ps1 pour effacer et reontruire l'indexe pour toutes les mailboxes.

Maintenant vous pouvez executer la commande Test-ExchangeSearch a nouveau pour voir les résultat et confirmer la bonne résolution du problème.

Astuce : Voir le statut de votre Base de données

[PS] C:\>Get-MailboxDatabase -status | format-list

JournalRecipient :
MailboxRetention : 30.00:00:00
OfflineAddressBook : \Default Offline Address List
OriginalDatabase :
PublicFolderDatabase : SERVER\Second Storage Group\Public Folder Datab
ase
ProhibitSendReceiveQuota : 2355MB
Recovery : False
ProhibitSendQuota : 2GB
IndexEnabled : True
AdministrativeGroup : Exchange Administrative Group (XXXXXXXXXXXXXXX)
AllowFileRestore : False
BackupInProgress : False
CopyEdbFilePath :

DatabaseCreated : True
Description :
EdbFilePath : D:\Exchange Server\Mailbox\First Storage Group\
Mailbox Database.edb
ExchangeLegacyDN : /o=organization/ou=Exchange Administrative Group (XXXXXXXXXXXXXXX)/cn=Configuration/cn=Serve
rs/cn=APOLLO/cn=Microsoft Private MDB
HasLocalCopy : False

DeletedItemRetention : 14.00:00:00
LastFullBackup : 19/09/2007 3:03:30
LastIncrementalBackup :
MaintenanceSchedule : {zo.1:00-zo.5:00, ma.1:00-ma.5:00, di.1:00-di.5
:00, wo.1:00-wo.5:00, do.1:00-do.5:00, vr.1:00-
vr.5:00, za.1:00-za.5:00}
MountAtStartup : True
Mounted : True
Organization : organization
QuotaNotificationSchedule : {zo.1:00-zo.1:15, ma.1:00-ma.1:15, di.1:00-di.1
:15, wo.1:00-wo.1:15, do.1:00-do.1:15, vr.1:00-
vr.1:15, za.1:00-za.1:15}
RetainDeletedItemsUntilBackup : False
Server : SERVER
ServerName : SERVER
StorageGroup : SERVER\First Storage Group
StorageGroupName : First Storage Group
IssueWarningQuota : 1945MB
EventHistoryRetentionPeriod : 7.00:00:00
Name : Mailbox Database
MinAdminVersion : -2147453113
AdminDisplayName : Mailbox Database
ExchangeVersion : 0.1 (8.0.535.0)
DistinguishedName : CN=Mailbox Database,CN=First Storage Group,CN=InformationStore,CN=SERVER,CN=Servers,CN=Exchange Administrative Group (XXXXXXXXXXXXX),CN=Administrative Groups,CN=organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=dc1,DC=dc2
Identity : SERVER\First Storage Group\Mailbox Database
Guid : fb8152b8a-f47a-4bae-914d-7ebda1c397809
ObjectCategory : dc1.dc2/Configuration/Schema/ms-Exch-Private -MDB
ObjectClass : {top, msExchMDB, msExchPrivateMDB}
WhenChanged : 11/09/2007 20:11:58
WhenCreated : 11/09/2007 20:10:37
OriginatingServer : server.dc1.dc2
IsValid : True

Source:

http://www.corelan.be/index.php/2007/09/19/exchange-2007-indexing-and-searching-mailboxes/
http://technet.microsoft.com/en-us/library/aa995966.aspx
http://www.exchangeninjas.com/ExchangeSearchFAQ