Heute möchte ich eine neue Serie beginnen die darauf abzielt eine Suchanwendung zu entwickeln, welche zu großen Teilen gleichzeitig für die Sharepoint Enterprise Search als auch für die FAST Search funktioniert.

Als Beispielanwendung benutze ich ein Webpart welches ein SPGridview benutzt. Dieses werden wir in einer weiteren Serie vorstellen werden.

Wenn man eine Suchanwendung bauen möchte, die gleichzeitig für Enterprise als auch FAST Search funktioniert muss man die Klasse KeywordQuery verwenden da diese von beiden Typen der Suche benutzt werden können. Zuerst sollten Sie folgende Namespaces in Ihre Lösung verlinken:

using Microsoft.Office.Server.Search.Administration;using Microsoft.Office.Server.Search.Query;

Danach erstellen Sie ein Objekt und weisen ihm einen QueryText zu.

SPServiceContext serviceContext = SPServiceContext.GetContext(SPContext.Current.Site);SearchServiceApplicationProxy searchProxy = serviceContext.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;KeywordQuery keywordQuery = new KeywordQuery(searchProxy);keywordQuery.QueryText = "contentclass:STS_ListItem_DocumentLibrary IsDocument:true";

Als QueryText können Sie all die Werte eingeben, welche auch im Search Center benutzt werden. Sollten Sie nur nach bestimmten Elementen suchen können Sie auch folgende Werte benutzen (Quelle: Link)

case “STS_Web”: // Site
case “STS_List_850”: // Page Library
case “STS_ListItem_850”: // Page
case “STS_List_DocumentLibrary”: // Document Library
case “STS_ListItem_DocumentLibrary”: // Document Library Items
case “STS_List”: // Custom List
case “STS_ListItem”: // Custom List Item
case “STS_List_Links”: // Links List
case “STS_ListItem_Links”: // Links List Item
case “STS_List_Tasks”: // Tasks List
case “STS_ListItem_Tasks”: // Tasks List Item
case “STS_List_Events”: // Events List
case “STS_ListItem_Events”: // Events List Item
case “STS_List_Announcements”: // Announcements List
case “STS_ListItem_Announcements”: // Announcements List Item
case “STS_List_Contacts”: // Contacts List
case “STS_ListItem_Contacts”: // Contacts List Item
case “STS_List_DiscussionBoard”: // Discussion List
case “STS_ListItem_DiscussionBoard”: // Discussion List Item
case “STS_List_IssueTracking”: // Issue Tracking List
case “STS_ListItem_IssueTracking”: // Issue Tracking List Item
case “STS_List_GanttTasks”: // Project Tasks List
case “STS_ListItem_GanttTasks”: // Project Tasks List Item
case “STS_List_Survey”: // Survey List
case “STS_ListItem_Survey”: // Survey List Item
case “STS_List_PictureLibrary”: // Picture Library
case “STS_ListItem_PictureLibrary”: // Picture Library Item
case “STS_List_WebPageLibrary”: // Web Page Library
case “STS_ListItem_WebPageLibrary”: // Web Page Library Item
case “STS_List_XMLForm”: // Form Library
case “STS_ListItem_XMLForm”: // Form Library Item
case “urn:content-class:SPSSearchQuery”: // Search Query
case “urn:content-class:SPSListing:News”: // News Listing
case “urn:content-class:SPSPeople”: // People
case “urn:content-classes:SPSCategory”: // Category
case “urn:content-classes:SPSListing”: // Listing
case “urn:content-classes:SPSPersonListing”:// Person Listing
case “urn:content-classes:SPSTextListing”: // Text Listing
case “urn:content-classes:SPSSiteListing”: // Site Listing
case “urn:content-classes:SPSSiteRegistry”: // Site Registry Listing

Zudem können Sie die Suche nach jedem weiteren ManagedProperty einschränken, welches den Wert Retrievable = true aufweist. Ganz leicht können Sie das mit dem FastSearchTool feststellen, welches mein Kollege Momme Küsel in einem weiteren Teil der Serie vorstellen wird.

In der KeyWordquery können Sie zudem einstellen welchen Searchprovider Sie nutzen wollen und welche ResultTypes für Sie interessant sind.

keywordQuery.ResultsProvider = SearchProvider.Default;
keywordQuery.ResultTypes = ResultType.RelevantResults;

Der Resultprovider kann entweder auf FastSearch oder SharepointSearch gestellt werden oder Sie lassen ihn auf Default, so dass sich die KeywordQuery automatisch den passenden Provider aussucht.

Weiterhin können Sie beliebige Managed Properties in die Ergebnismenge einschließen oder danach sortieren.

keywordQuery.SelectProperties.Add("LastModifiedTime");
keywordQuery.SortList.Add("LastModifiedTime", Microsoft.Office.Server.Search.Query.SortDirection.Descending);

Final führen Sie die Query aus und speichern das Ergebnis in einer Datatable.

ResultTableCollection resultsTableCollection = keywordQuery.Execute();
ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];
DataTable resultsDataTable = new DataTable() { Locale = CultureInfo.InvariantCulture, TableName = "Results" };
resultsDataTable.Load(searchResultsTable, LoadOption.OverwriteChanges);

Ein tolles Hilfsmittel bei der Entwicklung ist übrigens der Datavisualizer den Visual Studio von Haus aus mitbringt. Dafür betätigt man auf der Datatable einfach das Symbol mit der kleinen Lupe.

image

Anschließend sieht man die Ergebnisse der Suche zusammen mit den Managed Properties.

image

Dies war’s von der Keywordquery. In weiteren Teilen wird es darum gehen wie man eigene Felder mittels Crawled und Managed Properties für die Suche sichtbar macht. Dies werden wir sowohl für die Enterprise als auch für die Fast Search erklären. Aber zunächst wird mein Kollege Momme Küsel vom Mossman berichten.

Die Artikel im Überblick:

Teil 1: Die Keywordquery

Teil 2: MossMan – Das Tool für die Suche

Teil 3: Erstellen und Mapping von Managed Properties für die Enterprise Search

Teil 4: Erstellen von Crawled Properties für die Enterprise Search

Teil 5: Was sich bei Verwendung der FAST Search ändert

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.