Die Klasse FullTextSqlQuery kann zur Abfrage von SharePoint-Inhalten in einer SharePoint-Komponente (WebPart, FeatureReceiver, Job,…) genutzt werden. Da Fehlerausgaben teilweise recht schwammig sind (ala “An error occured… sender did not specify a reason.”), ergibt sich oft die Frage, wie man die gleiche Such-Abfrage einfach nachstellen kann.
Genau für dieses Fälle (also das Testen oder Nachstellen von Such-Anfragen in Form von Full-Text-Sql-Queries) nutze ich ein PowerShell-Skript, welches auf einem SharePoint-Server ausgeführt werden kann. Als Eingabe wird ein Query-String eingelesen. Das Resultat wird dann direkt auf der PowerShell-Konsole ausgegeben.
Hinweis: Es gibt auch ein paar Codeplex-Projekte, welche sich dem Theme widmen und GUIs hierfür entwickelt haben (vgl. “Search Community Toolkit“). Ich finde diese auch wunderbar, um bspw. die Managed-Search-Properties zu finden, welche ich für den Select-Part einer Search-Query verwenden kann, allerdings habe ich mit den Tools nie Ergebnisse gesehen. Deshalb die Lösung mit dem PowerShell-Skript.
Die Lösung mit dem PowerShell-Skript funktioniert wie folgt:
- PowerShell mit SharePoint-Modulen öffnen
- PowerShell-Skript aufrufen
- Full-Text-Sql-Query eingeben (Syntax s. “SharePoint Search SQL Syntax Reference“)
- Resultat ansehen
Und hier noch das PowerShell-Skript (ala Steve P):
$q = read-host “Enter query-text”
$site = get-spsite “http://<YourWebApp-Url>“
$kq = new-object Microsoft.Office.Server.Search.Query.FullTextSqlQuery($site)
$kq.ResultTypes= [Microsoft.Office.Server.Search.Query.ResultType]::RelevantResults
$kq.RankingModelId = “D9BFB1A1-9036-4627-83B2-BBD9983AC8A1″
$kq.QueryText = $q
$res = $kq.Execute()
$table = new-object System.Data.DataTable
$table.Load($res[$kq.ResultTypes],[System.Data.LoadOption]::OverwriteChanges)
echo $table
Sicherlich kann man das Skript noch erweitern, um bspw. die WebApp-Url als Eingabeparameter abzufragen, das Limiteren der Anzahl der Ergebniss oder das Highlighten bestimmter Ergebnis-Bestandteile (vgl. PowerShell auf Poshcode)… hier sind keine Grenzen gesetzt.
Viel Spaß beim Suchen!
Habe gerade bemerkt, dass beim Kopieren des obigen PowerShells darauf geachtet werden muss, dass die doppelten Anführungszeichen angepasst werden müssen.
Und noch ein Beispiel-Abfrage, weil ich mir die immer wieder selbst suche… ;-)
SELECT AccountName FROM Scope() WHERE “Scope”=’People’ ORDER BY AccountName
Und noch der Hinwes, dass die Anzahl der Rückgabewerte einen Default-Wert (50) besitzt. Dieser kann über das Property “kq.RowLimit=xyz” hochgesetzt werden.