In Teil 1 habe ich über die Keywordquery geschrieben und wie man dort Managed Properties von Suchergebnissen abfragen kann. Heute möchte ich darüber schreiben wie man eigene Managed Properties erstellt und diese auf Crawled Properties mappen kann.

Es gibt verschiedene Gründe warum man eigene Managed Properties nutzen möchte. Bei mir war es letztens im Projekt der Fall, dass die Managed Property die ich nutzen wollte zwar verfügbar war aber nicht Retrievable = true war. Ich hätte auch Retrievable auf true setzen können und es beim Zurückziehen wieder auf false jedoch hätte ich damit einer möglichen Drittanbieterlösung, die dies genauso tut die Grundlage entzogen.

Um eine Managed Property zu erstellen, muss man sich zunächst die SearchServiceApplication besorgen.

SPServiceContext serviceContext = SPServiceContext.GetContext(webapp.ServiceApplicationProxyGroup, SPSiteSubscriptionIdentifier.Default);
SearchServiceApplicationProxy searchApplicationProxy = serviceContext.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;
SearchServiceApplicationInfo searchApplictionInfo = searchApplicationProxy.GetSearchServiceApplicationInfo();

SearchServiceApplication searchApplication = SearchService.Service.SearchApplications.GetValue<SearchServiceApplication>(searchApplictionInfo.SearchServiceApplicationId);
Schema searchSchema = new Schema(searchApplication);

Anschließend kann man es über folgenden Code erstellen. Als type wird hier ein ManagedDataType verwendet.

ManagedPropertyCollection properties = searchSchema.AllManagedProperties;
ManagedProperty mp = properties.Create(propertyname, type);
mp.HasMultipleValues = false;
mp.RemoveDuplicates = true;
mp.Update();

Wurde das ManagedProperty erfolgreich erstellt, kann es auf ein Crawled Property gemappt werden.

private static void CreateMapping(ManagedProperty mp, CrawledProperty cp)
{
  Mapping mapping = new Mapping(cp.Propset, cp.Name, cp.VariantType, mp.PID);
  MappingCollection mapCol = mp.GetMappings();
 if (!mapCol.Contains(mapping))
  {
    mapCol.Add(mapping);
    mp.SetMappings(mapCol);
    mp.Update();
  }

…

}

Zum Schluss führt man noch ein Update der SearchApplication aus.

searchApplication.Update();

Im nächsten Teil der Serie beschäftigen wir uns mit dem Fall, dass man ein eigenes Crawled Property erstellen muss.

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.