.net “设置爬网属性”;包括在索引中“;以编程方式获取价值(Sharepoint 2007)

.net “设置爬网属性”;包括在索引中“;以编程方式获取价值(Sharepoint 2007),.net,sharepoint,sharepoint-2007,moss,web-crawler,.net,Sharepoint,Sharepoint 2007,Moss,Web Crawler,我正在使用自己的内容源开发Sharepoint搜索。我有爬网属性和托管属性,以及它们之间的映射。 此外,我还有动态属性,例如,用户可以将属性集更改为爬网,因此我在运行时从Sharepoint管理中心创建它。 我使用以下代码来实现这一点: private static void CreateProperty(string propertyName, Category category, ManagedPropertyCollection managedProperties) {

我正在使用自己的内容源开发Sharepoint搜索。我有爬网属性和托管属性,以及它们之间的映射。 此外,我还有动态属性,例如,用户可以将属性集更改为爬网,因此我在运行时从Sharepoint管理中心创建它。 我使用以下代码来实现这一点:

    private static void CreateProperty(string propertyName, Category category, ManagedPropertyCollection managedProperties)
    {
        var crawledProperty = category.CreateCrawledProperty(propertyName, false, Constants.CategoryId, 31);
        crawledProperty.IsMappedToContents = true;
        SetMapping(crawledProperty, managedProperties);
        crawledProperty.Update();
    }

    private static void SetMapping(CrawledProperty cProp, ManagedPropertyCollection managedProperties)
    {
        ManagedProperty mProp = managedProperties.Create(cProp.Name, ManagedDataType.Text);
        mProp.EnabledForScoping = true;
        Mapping newMapping = new Mapping(cProp.Propset, cProp.Name, cProp.VariantType, mProp.PID);
        MappingCollection mappings = mProp.GetMappings();
        mappings.Add(newMapping);
        mProp.SetMappings(mappings);
        mProp.EnabledForScoping = true;
    }
静态特性在安装时添加,动态特性在中央管理时手动添加。 我使用相同的代码添加属性,同时在管理中心手动安装和设置

问题是爬网属性的Sharepoint标志“包含在索引中”的值。在这种情况下,安装完成后,对于所有静态爬网属性,此标志的值都为TRUE(yes)。否则,对于动态属性,此标志为FALSE(否)。我需要始终选中标记“包含在索引中”

正如我所知,属性IsAppedToContents of CrawlProperty类负责“包含到索引”值,但它不适用于我

你有什么办法吗?我做错了什么


提前谢谢。

我发现了这个问题的答案。这是愚蠢的把戏! 主要问题是sharepoint具有对象实例的缓存。 让我们看看,我编写了如何以编程方式更新爬网属性IsMappedToContents属性值的示例

foreach (CrawledProperty crawledProperty in category.GetAllCrawledProperties())
{
   crawledProperty.IsMappedToContents = true;
   crawledProperty.Update();
}
您必须使用crawledProperty变量的新实例!如果你这样写:

CrawledProperty crawledProperty = category.CreateCrawledProperty(...);
crawledProperty.IsMappedToContents = true;
crawledProperty.Update();
你失败了

因此,始终使用已爬网属性的category.GetAllCrawledProperties()实例来更改此属性

PS:isappedtocontains负责Sharepoint中“包含在索引中”复选框的内容。 *PS2:这种东西适用于Sharepoint 2007,因为我知道Sharepoint 2010在缓存实例方面没有类似的问题*