I have created a .NET Assembly BCS connector and I am trying to understand how the connector is used during a search crawl.
My connector includes two entities with a parent child relationship. The parent entity includes an IdEnumerator, a SpecificFinder, and a AssociationNavigator.
I can successfully attach the Visual Studio debugger to the mssdmn.exe process, start a full crawl, and hit my breakpoints. As expected, the first breakpoint that gets hit is in the IdEnumerator as the search crawler needs to call this method to get
the list of entity IDs. Next the SpecificFinder is called for each entity. This too is expected as the crawler needs to get each entity to be crawled.
Now is where it gets strange. The AssociationNavigator is getting called 3 times for each parent entity. Then the SpecificFinder of the child entity gets called once for each child entity in the parent child relationship. Neither of these
behaviors is what I expected to happen. First, I have no idea why the AssociationNavigator would need to be called three times for each parent entity. It would seem that once would be enough. This method only gets called once when the connector
is used on the profile page. Why should it be any different for a search crawl? Second, I didn’t expect the SpecificFinder of the child entity to be called at all. My AssociationNavigator returns the child entity and has a TypeDescriptor
that matches the child entity’s SpecificFinder exactly.
Does anybody have any ideas as to why this works the way it does?
Hi,It seems to be that when it is searching it will crawl every parent – child step. At this way search can crawl all underlying data.Regards
When BCS does a crawl, it first calls the RootFinder method of the parent. If the RootFinder is marked with UseClientCachingForSearch, then it expects the RootFinder to be able to return all required data for each entity instance in an 8K block. For each