代码之家  ›  专栏  ›  技术社区  ›  noocyte

如何将动态搜索参数添加到Sharepoint搜索?

  •  1
  • noocyte  · 技术社区  · 17 年前

    有两个站点/项目:Bear和Wolf。Sharepoint Search索引了这些站点中的所有文档/列表/etc以及它们的公共存档。公共存档中的所有文档都有一个名为“ProjectName”的属性。当沃尔夫团队的比尔想要在他的项目站点(沃尔夫)中搜索“规范”时,他只想看到与该项目相关的文档。 那么,如何确保所有文档的“ProjectName”值都设置为“Wolf”?

    我猜我 能够

    2 回复  |  直到 17 年前
        1
  •  1
  •   Nat    17 年前

    搜索范围很容易通过编程进行管理。 看见 here .

    当搜索范围需要作为功能的一部分发布时,我就这样做了。

    很好。

    private ServerContext serverctx = null;
    private SearchContext searchctx = null;
    serverctx = ServerContext.GetContext("SharedServices1");
    searchctx = SearchContext.GetContext(serverctx);
    Scopes scopes = new Scopes(searchctx);
    foreach (Scope scope in scopes.GetSharedScopes())
    
    TreeNode node = treeViewScopes.Nodes.Add(scope.Name);
    
    foreach (TreeNode node in treeViewScopes.Nodes)
    {
      foreach (ScopeRule rule in scope.Rules)
      {
        if (rule is PropertyQueryScopeRule)
        {
          PropertyQueryScopeRule prule = (PropertyQueryScopeRule)rule;
          TreeNode childnode = node.Nodes.Add("Property Query Rule: ");
          childnode.Text += prule.Property.Name + " =  " + prule.Value;
        }
        if (rule is AllContentScopeRule)
        {
          AllContentScopeRule arule = (AllContentScopeRule)rule;
          node.Nodes.Add("All Content Rule");
        }
        if (rule is UrlScopeRule)
        {
          UrlScopeRule urule = (UrlScopeRule)rule;
          TreeNode childnode = node.Nodes.Add("URL Rule: ");
          childnode.Text += urule.MatchingString;
        }
      }
    }
    

    我将为每个站点添加一个属性,并使用该属性确定每个web需要添加到哪个范围。 然后,控制台风格的应用程序可以遍历服务器上的每个web,并添加作用域规则,以将每个url添加到正确的作用域中。

    这将允许将文档添加到站点,而无需显式设置文档级别的“项目”属性,从而确保文档不会被遗漏在特定范围内的搜索之外。

        2
  •  1
  •   Jason Weber    17 年前

    虽然您可以为此使用作用域,但我不推荐这样做。href字段将为您提供完全自动化搜索所需的一切,而无需进行日常维护。

    http://server/bears ,网站内所有项目的URL将为 http://server/bears/ ....

    推荐文章